西安模板网站建设,个人备案经营网站,ui网页设计尺寸,wordpress自动添加内链目录1.0.简单版2.0.升级版2-1.call.timeout()怎么传入新的超时值2-2.timeout(10, TimeUnit.SECONDS)两个参数的意思#xff0c;具体含义3.0.进阶版3-1.java.net.SocketTimeoutException: 超时如何解决4.0.终极版1.0.简单版 以下是一个使用 Java 实际请求“第三方”的简单示例代…
目录1.0.简单版2.0.升级版2-1.call.timeout()怎么传入新的超时值2-2.timeout(10, TimeUnit.SECONDS)两个参数的意思具体含义3.0.进阶版3-1.java.net.SocketTimeoutException: 超时如何解决4.0.终极版1.0.简单版 以下是一个使用 Java 实际请求“第三方”的简单示例代码。这个示例使用了 Java 的 OkHttp 库来发送 HTTP 请求和接收。
import okhttp3.*;import java.io.IOException;public class ChatGPT {private static final String API_ENDPOINT your-api;private static final String API_KEY your-openai-api-key;public static void main(String[] args) throws IOException {OkHttpClient client new OkHttpClient();String prompt I like to eat pizza because;RequestBody requestBody new FormBody.Builder().add(prompt, prompt).add(max_tokens, 50).add(temperature, 0.5).build();Request request new Request.Builder().url(API_ENDPOINT).header(Authorization, Bearer API_KEY).header(Content-Type, application/json).post(requestBody).build();Call call client.newCall(request);Response response call.execute();String responseBody response.body().string();System.out.println(responseBody);}
}在这个示例中我们使用了OkHttp库来发送HTTP请求到OpenAI的GPT-3 API并接收响应。我们需要将OpenAI提供的API密钥设置为API_KEY变量的值并将要请求的文本设置为prompt变量的值。我们还需要指定一些请求参数如max_tokens和temperature用于控制生成的文本长度和创造性程度。最后我们将API响应的主体内容打印到控制台中。 请注意这个示例是一个简单的示例实际使用中可能需要进行更多的错误处理和数据解析。另外OpenAI提供了多种API和模型具体的实现可能因模型和API而异。
执行结果
{error: {message: Invalid Content-Type header (application/x-www-form-urlencoded), expected application/json. (HINT: If youre using curl, you can pass -H Content-Type: application/json),type: invalid_request_error,param: null,code: null}
}分析问题 这个错误提示是由于请求头中的Content-Type设置为了application/x-www-form-urlencoded但是OpenAI API要求请求头的Content-Type设置为application/json。因此您需要在请求中将Content-Type修改为application/json。您可以使用OkHttp库的MediaType类来指定JSON格式的请求正文。以下是一个示例代码
2.0.升级版
import okhttp3.*;import java.io.IOException;public class ChatGPT {private static final String API_ENDPOINT your-api;private static final String API_KEY your-openai-api-key;public static void main(String[] args) throws IOException {OkHttpClient client new OkHttpClient();String prompt I like to eat pizza because;MediaType mediaType MediaType.parse(application/json; charsetutf-8);String requestBody {\prompt\:\ prompt \,\max_tokens\:50,\temperature\:0.5};Request request new Request.Builder().url(API_ENDPOINT).header(Authorization, Bearer API_KEY).header(Content-Type, application/json).post(RequestBody.create(mediaType, requestBody)).build();Call call client.newCall(request);Response response call.execute();String responseBody response.body().string();System.out.println(responseBody);}
}在这个示例中我们使用了OkHttp库的MediaType类来指定请求正文的格式为JSON。我们将请求正文格式化为JSON字符串并将其作为请求体发送。另外我们还将Content-Type设置为application/json。 上面代码执行没有问题但是遇到个别问题会出现响应超时的异常错误
执行结果 Call call client.newCall(request); Response response call.execute(); 报错 timed out 分析问题
当服务器响应请求的时间过长时通常会发生“超时”错误。要修复此错误您可以尝试以下操作 1.增加超时您可以尝试增加代码中的超时值。这将使服务器有更多时间在发生超时错误之前进行响应。您可以通过调用该call.timeout()方法并以秒为单位传入新的超时值来完成此操作。 2.检查您的网络连接有时缓慢或不可靠的网络连接会导致超时错误。确保您的互联网连接稳定且快速并检查其他网站或应用程序是否遇到类似问题。 3.查看服务器状态可能是你所在的服务器运行卡顿。
2-1.call.timeout()怎么传入新的超时值 要为您的 OkHttpCall对象设置一个新的超时值您可以使用该timeout方法并指定一个新的超时持续时间。
例如如果你想设置 10 秒的超时你可以使用下面的代码
Call call client.newCall(request);
call.timeout().timeout(10, TimeUnit.SECONDS);
Response response call.execute();在此代码中该timeout方法返回的一个实例Timeout您可以使用该实例通过该timeout方法设置新的超时值。timeout 的第一个参数是超时持续时间第二个参数是时间单位在本例中为TimeUnit.SECONDS。
2-2.timeout(10, TimeUnit.SECONDS)两个参数的意思具体含义
OkHttp 中的方法timeout有两个参数 1.duration这是 OkHttp 在请求超时之前等待的时间。它是一个 long 值表示超时持续时间。 2.unit这是用于参数的时间单位duration。它是枚举的一个实例TimeUnit允许您以秒、毫秒、微秒或纳秒为单位指定持续时间。 所以在代码中timeout(10, TimeUnit.SECONDS)10是超时的持续时间以秒为单位并且TimeUnit.SECONDS是指定持续时间的时间单位。这意味着 OkHttp 将在请求超时之前等待 10 秒。如果服务器在 10 秒内没有响应OkHttp 将抛出超时异常。
3.0.进阶版
按照上面的改进思路增加了call.timeout()方法。
Call call client.newCall(request);
call.timeout().timeout(180, TimeUnit.SECONDS);
Response response call.execute();在Call call client.newCall(request);的后面增加了call.timeout().timeout(180, TimeUnit.SECONDS);这么一行代码重新执行。
执行结果 java.net.SocketTimeoutException: timeout 发现问题还是没有解决!
分析问题 通常SocketTimeoutException表示客户端没有收到来自服务器的及时响应。当服务器响应时间过长或客户端与服务器之间存在网络连接问题时可能会发生这种情况。 在您的情况下该timeout方法用于设置 200 秒的超时值这对于大多数用例来说应该足够了。但是如果服务器在该时间段内仍未响应您可能需要尝试增加超时值以查看是否可以解决问题。 另一个可能的原因SocketTimeoutException是客户端和服务器之间可能存在一些网络连接问题。您可能需要检查您的网络连接并确保它稳定可靠。 最后也有可能是服务器本身的问题。您可能需要检查服务器日志以查看是否存在任何可能导致超时的错误或问题。
3-1.java.net.SocketTimeoutException: 超时如何解决
SocketTimeoutException通常在网络操作完成时间过长时抛出。要解决此错误您可以尝试以下操作
1.增加超时值您可以尝试增加网络操作的超时值。这可以使用或类timeout中的方法来完成。例如您可以使用以下代码将超时设置为 60 秒OkHttpClientURLConnection
OkHttpClient client new OkHttpClient.Builder().connectTimeout(60, TimeUnit.SECONDS).readTimeout(60, TimeUnit.SECONDS).build();这会将连接和读取超时设置为 60 秒。 2.检查您的网络连接确保您的网络连接稳定且快速。您可以尝试重置您的路由器或检查您的互联网服务提供商是否存在任何问题。 3.检查服务器状态您尝试连接的服务器可能流量过大或暂时关闭。您可以查看服务器状态或联系服务器管理员确认。 4.优化您的代码如果您的代码发出许多网络请求您可以对其进行优化以减少请求数量或将请求一起批量处理。 4.0.终极版
对方法进行一下封装方便接口调试
完整代码
package com.example.business.controller;import okhttp3.*;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;import java.io.IOException;
import java.util.concurrent.TimeUnit;Controller
RequestMapping(value /chat)
public class ChatGPTController {private static final String API_ENDPOINT your-api;private static final String API_KEY your-openai-api-key;ResponseBodyRequestMapping(value /get-chat-info, produces application/json;charsetUTF-8, method {RequestMethod.GET, RequestMethod.POST})public String getChatInfo(String prompt) throws IOException {
// OkHttpClient client new OkHttpClient();OkHttpClient client new OkHttpClient.Builder().connectTimeout(180, TimeUnit.SECONDS).readTimeout(180, TimeUnit.SECONDS).build();// String prompt I like to eat pizza because;MediaType mediaType MediaType.parse(application/json; charsetutf-8);String requestBody {\prompt\:\ prompt \,\max_tokens\:1024,\temperature\:0.9,\top_p\:1,\frequency_penalty\:0.0,\presence_penalty\:0.6};Request request new Request.Builder().url(API_ENDPOINT).header(Authorization, Bearer API_KEY).header(Content-Type, application/json).post(RequestBody.create(mediaType, requestBody)).build();Call call client.newCall(request);call.timeout().timeout(180, TimeUnit.SECONDS);Response response call.execute();String responseBody response.body().string();System.out.println(responseBody);return responseBody;}
}
执行结果
{id: cmpl-6k7pjisebdHLjNIF0wKoLyEhyOCVJ,object: text_completion,created: 1676451219,model: text-davinci-003,choices: [{text: \n有什么可以帮助您,index: 0,logprobs: null,finish_reason: stop}],usage: {prompt_tokens: 4,completion_tokens: 21,total_tokens: 25}
}PS更多接口请查阅官方文档 创作不易感谢您的点赞与支持。