当前位置: 首页 > 知识库问答 >
问题:

在java代码中获取"java.io.IOException: Server返回的HTTP响应代码:403 for URL:"

章宏峻
2023-03-14

我正在尝试验证10万人的linkedIn配置文件,并编写了一个伪代码,但其给出的“java.io.IOException:Server返回了URL的HTTP响应代码:403:https://www.linkedin.com/in/test.user"

我尝试设置不同的setRequestProperty,但不起作用。

公共静态空main(最终字符串[]参数){

    String output = "";
    int TIMEOUT_VALUE = 99999999;
    HttpURLConnection conn = null;
    BufferedReader br = null;
    String urlEndPoint = "";
    String authUser = "";
    String authPwd = "";
    try {
        long start = System.nanoTime();

        urlEndPoint = "https://www.linkedin.com/in/test.user";
        authUser = "linkedin-username";
        authPwd = "linkedin-password";
        URL url = new URL(urlEndPoint);
        conn = (HttpURLConnection) url.openConnection();
        conn.setRequestProperty("username", authUser);
        conn.setRequestProperty("password", authPwd);
        conn.setRequestProperty("Connection", "Keep-Alive");
        conn.setRequestProperty("Keep-Alive", "header");
        conn.setRequestProperty("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
        conn.setConnectTimeout(TIMEOUT_VALUE);
        conn.setReadTimeout(TIMEOUT_VALUE);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Accept-Language", "en-US,en;q=0.9,mt;q=0.8");
        conn.setRequestProperty("Accept-Encoding", "gzip,deflate,br");
        conn.setRequestProperty("Host", "www.linkedin.com");
        conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36");
        conn.setRequestProperty("http.agent", "Chrome/71.0.3578.80 (Windows NT 10.0; Win64; x64)");
        conn.setDoOutput(true);
        String userPassword = authUser + ":" + authPwd;
        String encoding = Base64Encoder.encode(userPassword);
        conn.setRequestProperty("Authorization", "Basic " + encoding);
        OutputStream os = conn.getOutputStream();
        os.flush();
        conn.connect();
        br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
        while ((output = br.readLine()) != null) {
            System.out.println(output);
        }

        if (br != null) {
            br.close();
        }
        if (os != null) {
            os.close();
        }

        long elapsed = System.nanoTime() - start;

    } catch (MalformedURLException e) {
        //this.logger.error("Error occurred during processPartyTerrRelationship ", e);
        e.printStackTrace();
    } catch (IOException e) {
        //this.logger.error("Error occurred during processPartyTerrRelationship ", e);
        e.printStackTrace();
    } catch (Exception e) {
        //this.logger.error("Error occurred during processPartyTerrRelationship ", e);
        e.printStackTrace();
    } finally {
        try {
            if (conn != null) {

                conn.disconnect();
            }
        } catch (Exception e) {
            //this.logger.error("Error occurred during processPartyTerrRelationship ", e);
            e.printStackTrace();
        }
    }
    //logger.info("processPartyTerrRelationship called ends");

}

上述代码的输出代码为:

java.io.IOException: Server returned HTTP response code: 403 for URL: https://www.linkedin.com/in/test.user
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1894)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:263)
    at ValidateLinkedInProfiles.main(ValidateLinkedInProfiles.java:57)

共有3个答案

江子石
2023-03-14

HTTP 403是来自服务器的合法响应。因此该行为是有效的。但是,我建议使用一些HTTP客户端实用程序,而不是编写自己的代码来发出Http请求。这将减少由您自己的代码引起问题的机会。作为一些Http客户端,我建议Apache Http Client或OK Http客户端或MgntUtils Http Client(请参阅此处的MgntUtils HttpClient javadoc,github上的完整MgntUtils库在此处,Maven存储库在此处)。
免责声明:MgntUtils库是我写的

曾瀚昂
2023-03-14

很难理解你是如何工作的。LinkedIn链接需要登录。但您确实需要以某种方式对其进行调试,并且需要使用正确的原始真实输出将其发送到服务器,否则您将无法完成它。如果你有Java示例程序,看看他们或你是否有输入错误,但同样没有LinkedIn的屏幕截图或文本,我无法调试它。也许尝试添加示例,我会尽力帮助您(只需让我用我的公共配置文件登录到其他地方)。当然,还要确保在正确的字段中有您的真实密码和您的用户帐户(authUsrauthPwd与其他内容不同,不得复制粘贴)。

邢凯歌
2023-03-14

HTTP错误代码403是与对请求的资源的授权相关的错误:

HTTP 403提供了与HTTP 401不同的错误情况;虽然HTTP 401在客户端未进行身份验证时返回,并且意味着在有效身份验证后可能会返回成功响应,但HTTP 403在客户端由于身份验证以外的某些原因不允许访问资源时返回

 类似资料:
  • 我正在使用JMeter执行负载测试,用户应该执行启动-登录- clk仪表板页面- clk登录页面(登录后出现的页面,即主页),其中clk仪表板和clk登录页面重复操作5次。 直到30个用户,当我增加用户负载时,我没有收到任何错误,我开始收到错误,因为 响应代码:非HTTP响应代码:org.apache.HTTP.conn.HttpHostConnectException响应消息:非HTTP回应消息

  • 我需要保存通过json发送的响应代码,例如404: 我尝试使用以下代码: 但是laravel告诉我这个错误: 非静态方法Symfony\Component\HttpFoundation\Response::getStatusCode()不应静态调用

  • 试图通过Jmeter为一系列用户提供 Rest API Web 服务。(20,30,50,80 个用户)。80% 的请求样本得到处理,但大约 20% 的样本出错,采样器结果下出现以下消息。 “响应代码:非HTTP响应代码:java.net.ConnectException响应消息:非HTTP回应消息:连接超时:连接”。 是Jmeter还是服务器端的问题?对此的解决方案是什么?

  • 我使用curl获取http头以查找http状态代码并返回响应。我使用以下命令获取http头

  • 问题内容: 我正在尝试从URL获取InputStream。可以从Firefox打开URL。它返回一个json,并且我已经安装了一个插件以在Firefox中查看json,因此我可以在其中查看它。 所以我尝试通过以下方式从Java获取它: 但是它在urlConnection.getInputStream()中抛出IOException。 我也尝试过: 但是没有运气。 任何信息都是可观的。提前致谢。 问