gpt4 book ai didi

java - 授权用户读取 URL 正文内容时出错

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:56 24 4
gpt4 key购买 nike

我不知道发生了什么请就以下问题提出建议:

为了点击一个 URL 并读取它返回的内容。我首先在一个单独的函数中授权用户 ID 和密码,然后我使用这个函数来访问我定义的 URL。我做了以下功能:

功能名称和功能

  • AQMAuthorize() - 用于授权,成功后返回用户详细信息 Login
  • AQM_Search_Api() - 读取 URL
  • 给出的所有数据(Json)的获取方法
  • AQMApplyMetaData - 在点击 URL
  • 时添加一些元数据的 POST 方法

    函数的工作

    A. The authorize function is works perfect if run alone, or called in AQMApplyMetaData().

    B. If authorize function is called in AQM_Search_Api(), I get the Authentication Error:java.io.IOException: Server returned HTTP response code: 401 for URL . Dont know why it appear?

    C. The GoogleChrome Postman Echo works fine for all my URL and returns JSON as expected.



    功能 1 和 3 的代码是:
      public String AQMAuthorize()  {

    try {

    ResourceBundle bundle = ResourceBundle.getBundle("com.EF.apps.trqueue.resources.config");
    String Server_URL = bundle.getString("SERVER_ADDRESS");
    String userName = bundle.getString("ADMIN_ID");
    String userPassword = bundle.getString("ADMIN_PWD");

    String url = "http://" + Server_URL + "/api/rest/authorize";
    URL obj = new URL(url);
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();

    //add reuqest header
    String auth = userName + ":" + userPassword;
    byte[] encoded = Base64.encodeBase64(auth.getBytes()); //encoding to base64
    String encodedString = new String(encoded);
    con.setDoInput(true);
    con.setDoOutput(true);
    //con.setRequestProperty("Authorization", "Basic " + encodedString);

    con.setRequestMethod("POST");
    JSONArray jsonParent = new JSONArray();
    JSONObject jSonOBJ=new JSONObject();
    jSonOBJ.put("id","recording");
    jSonOBJ.put("userId", userName);
    jSonOBJ.put("password", userPassword);
    jsonParent.add(jSonOBJ);


    OutputStreamWriter wr= new OutputStreamWriter(con.getOutputStream());
    wr.write(jsonParent.toString());

    wr.flush();
    wr.close();


    int responseCode = con.getResponseCode();
    System.out.println("\nSending 'POST' request to URL : " + url);
    System.out.println("Post parameters : " + jSonOBJ);
    System.out.println("Response Code : " + responseCode);

    BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
    }
    in.close();

    //print result
    System.out.println(response.toString());
    return response.toString();
    }

    catch(Exception e){
    e.printStackTrace();
    return e.toString();
    }

    }

    public String AQM_Search_Api(String sessionID, String agentID) {

    try{
    //Authorize Custom method
    AQMAuthorize();

    ResourceBundle bundle = ResourceBundle.getBundle("com.EF.apps.trqueue.resources.config");
    String Server_URL = bundle.getString("SERVER_ADDRESS");
    String userName = bundle.getString("ADMIN_ID");
    String userPassword = bundle.getString("ADMIN_PWD");
    URLConnection urlConn = null;
    InputStream is;
    String credentials = userName + ":" + userPassword;

    byte[] authEncBytes = Base64.encodeBase64(credentials.getBytes());
    String authStringEnc = new String(authEncBytes);

    String url = "http://" + Server_URL + "/api/rest/recording/contact?beginTime=2009-01-01&metadata=SessionID~44Test_Session_ID44";
    URL obj = new URL(url);
    urlConn = obj.openConnection();
    // ERROR IS THROWN ON ABOVE STATEMENT

    return "dummyData";
    }
    catch (Exception ex){
    return ex.toString();
    }
    }

    最佳答案

    我遇到了类似的问题,我认为您遇到了与我相同的问题(注意:我使用的是 Postman 并且没有 Java 代码示例)。我实现的内容与您的代码示例中的内容之间存在三个差异。

    第一个区别是您的 JSON 有效负载应类似于以下内容:

    [
    {
    "id":"recording",
    "userId": "importUser",
    "password": "PCS997#62",
    "data": {
    "qm.service":true
    }
    }
    ]

    这里的区别是您缺少 dataqm.service JSON 对象的一部分。由于使用了 Active Directory,我们还拥有一个域。这解决了我的问题。

    第二个区别是,AQM 端点不需要 base64 编码的请求 header 。这些端点都使用 JSESSIONID授权消息中提供的 cookie。这适用于所有 API 调用。我过去使用过的其他 Cisco 端点已经完成了 base64 编码的请求 header ,但似乎这些端点没有。

    第三个区别是我不需要 metadata搜索 API 请求中的查询参数。我只是确保我的 JSESSIONID cookie 包含在请求中。

    例如,您可以阅读 "Cisco Unified Workforce Optimization Quality Management API and Database Schema Reference Guide Version 11.5" (PDF)由思科提供。

    关于java - 授权用户读取 URL 正文内容时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40062677/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com