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 you're 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; charset=utf-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>";@ResponseBody@RequestMapping(value = "/get-chat-info", produces = "application/json;charset=UTF-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; charset=utf-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:更多接口请查阅官方文档

在这里插入图片描述
创作不易,感谢您的点赞与支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/72952.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python客户端实现利用第三方smtp发邮件

上面采用的是qq邮箱&#xff0c;需要登录qq邮箱打开pop3 参考资料1(20条消息) Python使用SMTP协议实现邮件发送(含明文/SSL加密/TLS加密)_dev_zyx的博客-CSDN博客 参考资料2(20条消息) python实现smtp协议发送邮件_Clarence-CSDN博客

mathtype7 正版官网 宣布免费使用

地址&#xff1a;谷歌搜索去&#xff0c;后缀是com的 &#xff0c;不是cn的。

MathType7应用中文版特色功能介绍

MathType 是由美国Design Science公司开发的功能强大的数学公式编辑器&#xff0c;它同时支持Windows和Macintosh 操作系统&#xff0c;与常见的文字处理软件和演示程序配合使用&#xff0c;能够在各种文档中加入复杂的数学公式和符号。2021年11月1日&#xff0c;MathType升级到…

MathType中/英文版下载地址汇总(适用于Mathtype6.9)

*本文不提供任何破解相关情报&#xff0c;仅提供官方下载地址&#xff0c;供word用户交流学习使用 一、中文官网 百度能直接找到的MathType中文版下载地址 https://www.mathtype.cn/xiazai.html 优点&#xff1a;简体中文网页&#xff0c;方便访问 缺点&#xff1a;只能下最…

mathtype7.4数学计算工具下载安装教程

很多朋友使用word写文档或者论文&#xff0c;但是又要插入很多数学计算公式的情况&#xff0c;使用word本身的公式和符号并不是很方便用&#xff0c;今天分享给大家一个实用的数学工具mathtype。 MathType软件可以选择下载Windows版本MathType 7或Mac版本MathType 7。MathType…

福音:IDEA、VSCODE神级插件Bito

文章目录 Bito是什么&#xff1f;IDEA环境安装注册使用 VSCODE环境疑难问题后叙 Bito是什么&#xff1f; Bito是一款在编程软件中使用的插件&#xff0c;由ChatGPT团队开发&#xff0c;它是ChatGPT团队为了提高开发效率而开发的一款工具。 Bito的AI帮助开发人员极大地提高了其…

用chargpt一分钟,一键生成PPT!

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 这是《ChatGPT 从入门到精通》第 13 篇基础教程 有同学留言&#xff0c;问&#xff1a;还有没有更简单的方法&#xff1f;更快的…

计算机专业英语公开课教案,8个维度,教你如何上好一节英语公开课

原标题&#xff1a;8个维度&#xff0c;教你如何上好一节英语公开课 理性看待公开课 公开课的主要功能是探讨教学规律&#xff0c;研究教学方法&#xff0c;推广教学经验&#xff0c;提升教学质量。具有展示和研究的双重性质&#xff0c;既可以用来赛课评奖&#xff0c;展示教师…

【英语:基础进阶_新闻美剧听说】G4.听力进阶—如何理解英美剧中的文化梗

英美剧中梗 的常见类型 双关梗节日梗名人梗习俗梗1.双关梗 1.1.双关语 Pun: the clever or humorous use of a word that has more than one meaning, or of words that have different meanings but sound the same 双关语是一种在特定的语言环境中, 巧妙利用语言中声音、意…

计算机专业英语公开课教案,如何上好一节优秀英语公开课?(附视频)

对青年教师来说&#xff0c;开一节公开课&#xff0c;如同完成一次蜕变&#xff0c;累掉一层皮&#xff0c;有着刻骨铭心的阵痛&#xff0c;但换来的是突飞猛进的专业成长。可以说&#xff0c;公开课是青年教师培训的有效途径&#xff0c;是名师培养的摇篮。下面&#xff0c;我…

分享一个边看视频就能边练口语的学习网站,超实用,不仅仅能学英语

“情感是一种智力&#xff0c;生活需要学习”&#xff0c;快节奏的生活中&#xff0c;我们最不能放下的就是学习&#xff0c;稍不注意就会和其他人脱节&#xff0c;好比一天不刷两个视频&#xff0c;看看新梗&#xff0c;你就不知道别人在说什么。盘哥最近每天睡觉前都会看半小…

六级备考6天|CET-6|听力第一二三四讲|复习回顾|长对话篇章|14:00~16:30

长对话 篇章 目录 听写笔记 练习讲义 听写笔记 1. 听力策略 听前&#xff1a;读题——分析文章——预测题目 听中&#xff1a;划出听到的内容——对应程度高为正确选项 听后&#xff1a;不听题目——往下读题 2. 重点词汇 proofread / ˈpruːfriːd / …

Lesson 25 Do the English speak English? 英国人讲的是英语吗?

1.原文 2. 参考译文 3. New words and expressions ★several quantifier 几个 several&#xff1d;a number of… 一些&#xff0c;只能修饰可数 several times 许多次(不能说some times) some 一些, 即可以修饰可数, 又可以修饰不可数 a great number of… 大量的some time …

推荐三个很赞的英语学习网

很多读者都知道我有在学英语&#xff0c;对英语蠢蠢欲动的同学&#xff0c;纷纷给我留言&#xff0c;问我是怎么学习的&#xff1f;有什么学习渠道、学习技巧之类的么&#xff1f;哪有啊&#xff0c;我也就是随意瞎学&#xff0c;没有任何技巧而言&#xff0c;我总觉得学习哪有…

英语学习打卡-美国语文1-4

水滴打卡 -美国语文 目录 十大词类&#xff1a; 第一篇 文章 单词 语法 生活场景 第二篇 单词 语法 生活场景 第三篇 单词 语法 生活场景 第四篇 单词 语法 生活场景 十大词类&#xff1a; 1,名词,Nouns (n.) 表示人或事物的名称 box,pen,tree,apple 2,代词…

【英语:基础进阶_新闻美剧听说】G1.新闻英语与影视英语的区别和学习指南

1. 新闻英语和影视英语的区别 请看英语新闻一则 Tiger Woods told police after crashthat he didn’t remember driving (CNN) - When Tiger Woods crashed his car(撞车) in Southern California last week, he told sheriff s deputies that he had no recollection of(不…

英语口语学习文章分享

英语口语学习背诵文章 DAY1 SUCCESS Success means different things for different people.Some may equate it with fame ,some with wealth,and still some with accomplishments. For me , it means fulfilling one’s dream,whatever your dreams are ,you have a goal th…

想起了高中时的一个疑问

有感于 中国科学家测定引力传播速度、完善牛顿引力定律的发现之路 高中物理书说场是"一种特殊的物质", 我就老觉得各种物质其实只是能量的某种形式. 一次在灶台上烧火, 突然想把光的传播与热的传播速度给测出来. 呵呵.....结果当然不能. 但我还是一直认为: 能量才…

关于被3个搞物理的“颠覆”了且数学天才陶哲轩“开始压根不相信”的数学常识的算法实现与理解

近日&#xff0c;网上公布了一篇关于根据子矩阵的特征值求得平方赋范特征向量的一篇文章“Eigenvectors from Eigenvalues”[1]。据网上推文描述&#xff0c;该文章是三位物理学家Peter Denton、Stephen Parke和张西宁在做中微子研究时意外发现的一项成果。该推文名为《3个搞物…

数学老师在成人网站上教微积分,年入百万 。。。

试问&#xff0c;哪里是教微积分最好的地方&#xff1f;对来自中国台湾省的数学老师张旭来说&#xff0c; 不是个人网站、不是油管、不是在线辅导课&#xff0c;也不是线下补课班&#xff0c; 而是&#xff0c;Pornhub。 在这个全球知名的se情网站上&#xff0c;赵旭老师穿着朴…