首页 > 其他分享 >okhttp访问问题

okhttp访问问题

时间:2024-05-15 16:10:09浏览次数:24  
标签:String 问题 访问 connection user query okhttp new response

记录一下今天开发过程中的问题

问题起因:

公司通过dify进行大模型的交互,我是后端,负责后台请求的接入,后面发现了官方的java-client,就下载下来测试,官方案例如下:

import ai.dify.javaclient.DifyClient; import ai.dify.javaclient.ChatClient; import ai.dify.javaclient.CompletionClient; import okhttp3.Response;

 public class DifyApp {
 private static final String API_KEY = "your-api-key-here";
 ​
 public static void main(String[] args) {
    try {
        String user = "random-user-id";
        String inputs = "{\"name\":\"test name a\"}";
        String query = "Please tell me a short story in 10 words or less.";
        boolean responseMode = true;
 ​
        // Create a completion client
        CompletionClient completionClient = new CompletionClient(API_KEY);
        Response completionResponse = completionClient.createCompletionMessage(inputs, query, user, responseMode);
        System.out.println(completionResponse.body().string());
 ​
        // Create a chat client
        ChatClient chatClient = new ChatClient(API_KEY);
        // Create a chat message
        Response chatResponse = chatClient.createChatMessage(inputs, query, user, true, null);
        System.out.println(chatResponse.body().string());
 ​
        // Fetch conversations
        chatClient.getConversations(user);
        // Rename conversation
        String conversationId = "example-conversation-id";
        String name = "new-name";
        chatClient.renameConversation(conversationId, name, user);
 ​
        // And so on for other methods...
 ​
        DifyClient client = new DifyClient(API_KEY);
        // Fetch application parameters
        client.getApplicationParameters(user);
 ​
        // Provide feedback for a message
        String messageId = "your-message-id";
        String rating = "5";
        client.messageFeedback(messageId, rating, user);
 ​
    } catch (Exception e) {
        e.printStackTrace();
    }
 }}

发现返回的请求失败

于是采用curl测试,代码如下

 curl -X POST 'http://localhost:9000/v1/completion-messages' \
 --header 'Authorization: Bearer app-EDKz7as0jjVKj21lUhnEUSrB' \
 --header 'Content-Type: application/json' \
 --data-raw '{
    "inputs": {"query": "Hello, world!"},
    "response_mode": "streaming",
    "user": "abc-123",
 ​
 "query": "Hello, world!"
 ​
 }'

请求成功,接着使用postman测试,也成功了,于是进行了长达两个小时的测试,没有发现任何不对的地方

我想着官方使用okhttp写的,我用java原生API自己写一个试试,成功了,原生写法如下:

 public void test1() {
 try {
     // 定义Dify后台的URL
     String urlString = "http://localhost:9000/v1/completion-messages"; // 替换为实际的Dify后台URL
 ​
     // 创建URL对象
     URL url = new URL(urlString);
 ​
     // 打开连接
     HttpURLConnection connection = (HttpURLConnection) url.openConnection();
 ​
     // 设置请求方法为POST
     connection.setRequestMethod("POST");
 ​
     // 添加请求头
     connection.setRequestProperty("Authorization", "Bearer app-RmUVDswZjVUyaDeAYkfcX9xu");
     connection.setRequestProperty("Content-Type", "application/json");
 ​
     // 允许向服务器写入数据
     connection.setDoOutput(true);
 ​
     // 构建请求体数据
     String requestBody = "{\"inputs\":{\"query\":\"Hello, world!\"},\"response_mode\":\"streaming\",\"user\":\"abc-123\",\"query\":\"1111\"}";
 ​
     // 发送请求体数据
     DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
     outputStream.writeBytes(requestBody);
     outputStream.flush();
     outputStream.close();
 ​
     // 获取响应代码
     int responseCode = connection.getResponseCode();
     System.out.println("Response Code: " + responseCode);
 ​
     // 读取响应内容
     BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
     String line;
     StringBuilder response = new StringBuilder();
     while ((line = reader.readLine()) != null) {
         response.append(line);
    }
     reader.close();
 ​
     // 输出响应内容
     System.out.println("Response: " + response.toString());
 ​
     // 关闭连接
     connection.disconnect();
 } catch (Exception e) {
     e.printStackTrace();
 }}

于是,我又使用apache httpclient又写了一套,结果还是成功了

代码如下:

 public void test2() {
     try {
         // 定义Dify后台的URL
         String urlString = "http://localhost:9000/v1/completion-messages"; // 替换为实际的Dify后台URL
 ​
         // 创建HttpClient实例
         HttpClient httpClient = HttpClientBuilder.create().build();
 ​
         // 创建HttpPost请求
         HttpPost httpPost = new HttpPost(urlString);
 ​
         // 添加请求头
         httpPost.setHeader("Authorization", "Bearer app-RmUVDswZjVUyaDeAYkfcX9xu");
         httpPost.setHeader("Content-Type", "application/json");
 ​
         // 构建请求体数据
         String requestBody = "{\"inputs\":{\"query\":\"Hello, world!\"},\"response_mode\":\"streaming\",\"user\":\"abc-123\",\"query\":\"1111\"}";
 ​
         // 设置请求体
         StringEntity entity = new StringEntity(requestBody);
         httpPost.setEntity(entity);
 ​
         // 发送POST请求
         HttpResponse response = httpClient.execute(httpPost);
 ​
         // 获取响应代码
         int statusCode = response.getStatusLine().getStatusCode();
         System.out.println("Response Code: " + statusCode);
 ​
         // 读取响应内容
         HttpEntity responseEntity = response.getEntity();
         String responseBody = EntityUtils.toString(responseEntity);
         System.out.println("Response: " + responseBody);
 ​
         // 关闭连接
 ​
    } catch (Exception e) {
         e.printStackTrace();
    }
 }
 

标签:String,问题,访问,connection,user,query,okhttp,new,response
From: https://www.cnblogs.com/Argilgamesh/p/18194059

相关文章

  • echarts图由于容器隐藏导致图表不显示问题解决办法
    开发过程中常常会遇到echarts图由于容器隐藏导致图表不显示问题,最简单的办法就是给容器元素加上宽度和高度容器加上固定的宽度和高度<divid="res"style="height:450px;width:1200px"></div>然而在实际开发中某些场景下,要求图表宽度100%显示,而计算容器的宽度有时又会十分的麻......
  • 【源码】蚁群算法TSP问题可视化
    ACO.Visualization项目本项目演示蚁群算法求解旅行商问题的可视化过程,包括路径上的信息素浓度、蚁群的运动过程等。项目相关的代码:https://github.com/anycad/ACO.Visualization注:本项目基于.NET8开发,需要安装VS2022最新版本。运行效果:https://www.bilibili.com/video/BV1Bf42......
  • 后端跨域cookie问题与spring-session-data-redis
    背景1、后端统一接入了公司内部登录系统,登录后cookie信息在域名:test.net.cn下。Set-Cookie:SESSION=09a2f617-66a0-4e02-b99f-130d83900321;Domain=test.net.cn;Path=/;HttpOnly;SameSite=Lax2、当我们的系统接入到统一登录系统后,若访问域名为a.test.net.cn,则不会出现问题,因......
  • visual studio installer“无法下载安装,请检查网络连接”问题的解决方法
       打开“网络适配器”打开“属性”选择“Internet协议版本4(TCP/IPv4)”选择“属性”双击进入选择“使用下面的DNS服务器地址(E)”首选DNS服务器填写:114.114.114.114备用DNS服务器填写:8.8.8.8   ......
  • 你能回答这些问题吗
    连续区间问题的代码都像打卡代码那样子写,是最有通用性的这道题目的查询也没办法像老板那样子写,还是因为我们没有办法判断左端/右端的最大连续子段和是否超过了当前区间还有理解这个代码的时候,不要去纠结递归的细节问题,就把函数看成一个问题,即intask(intp,intl,intr,intx,i......
  • ubuntu linux安装MySQL后遇到的一些问题和解决方法
    Ubuntulinux安装MySQL后遇到的一些问题和解决方法版本信息ubuntu:Ubuntu24.04mysql:Ver8.0.36-2ubuntu3forLinuxonx86_64((Ubuntu))登陆安装后直接sudomysql就可以登陆分析为什么可以不用sudomysql-uroot-p呢?原因有三点直接执行mysql命令它是可以根据......
  • 解决ajax请求参数过多导致参数被截断的问题
    最近发现了个问题:ajaxpost请求查询参数数量动态变化有200-250000个,当参数超过一定数量N时,post传到后台接的参数就只有N个,多出的参数都没附到请求中,这也是奇怪的事情,浏览器对参数的个数有限制。jsconstpayload={date:"2024-05-10",sn:[]};for(leti=1;i<1000......
  • 使用c#强大的表达式树实现对象的深克隆之解决循环引用的问题
    在上一期博客里,我们提到使用使用c#强大的表达式树实现对象的深克隆,文章地址:https://www.cnblogs.com/gmmy/p/18186750。但是文章里没有解决如何实现循环引用的问题。循环引用在C#中,循环引用通常发生在两个或更多的对象相互持有对方的引用,从而形成一个闭环。这种情况在使用面向对......
  • Cisco Identity Services Engine (ISE) 3.3 Patch 2 - 基于身份的网络访问控制和策略
    CiscoIdentityServicesEngine(ISE)3.3Patch2-基于身份的网络访问控制和策略实施系统思科身份服务引擎(ISE)-下一代NAC解决方案请访问原文链接:CiscoIdentityServicesEngine(ISE)3.3Patch2-基于身份的网络访问控制和策略实施系统,查看最新版。原创作品,转载......
  • python算法:年龄问题
    一,认识递归函数1,什么是递归?递归的工作原理是,如果函数需要处理的问题大小合适,则直接求解并返回结果,否则将问题分解成两个或多个更小的子问题,并对子问题进行相同的处理,直到问题无法分解为止2,什么是递归函数:递归函数(recursivefunction)是指在函数体中可以调用自己的函数3,语......