【问题标题】:Trying to get html texts from google url, but error 401尝试从 google url 获取 html 文本,但错误 401
【发布时间】:2013-06-23 02:07:01
【问题描述】:

我正在尝试从谷歌返回的页面列表中检索一些 html 文本。它们中的大多数都可以正常工作,但是对于诸如 https://www.google.com/patents/US6034687 之类的 URL,总是会出现 401 错误,请参见下文

Server returned HTTP response code: 401 for URL: https://www.google.com/patents/US6034687

我正在使用 java,我确实查看了这个错误代码,它似乎与身份验证有关,但这种 URL 可以从任何浏览器访问,而无需要求登录。所以我很困惑,为什么只有这种 URL 对我不起作用。 这是我检索 html 的代码

URL u=new URL(url);
    StringBuilder html =new StringBuilder();
     HttpURLConnection conn = (HttpURLConnection) u.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Accept", "text/html");
        BufferedReader br;
        try {
            br = new BufferedReader(new InputStreamReader((conn.getInputStream())));

        String out="";
        while ((out= br.readLine()) != null) {
        //   System.out.println(out);
             html.append(out+"\n");
        }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

有什么想法吗?

谢谢

【问题讨论】:

    标签: java google-app-engine jakarta-ee xml-parsing html-parsing


    【解决方案1】:

    请求需要用户身份验证。响应必须包含一个 WWW-Authenticate 头字段,该字段包含适用于所请求资源的质询。客户端可以使用合适的授权头域重复请求。如果请求已包含授权凭证,则 401 响应指示已拒绝对这些凭证的授权。如果 401 响应包含与先前响应相同的质询,并且用户代理已经尝试了至少一次身份验证,则应该向用户呈现响应中给出的实体,因为该实体可能包含相关的诊断信息。 HTTP 访问身份验证在“HTTP 身份验证:基本和摘要式访问身份验证

    中进行了说明

    【讨论】:

      【解决方案2】:

      尝试在请求中发送一个 User-Agent 标头。 401 状态具有误导性。一些服务器不允许来自非浏览器客户端的请求。

      conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 5.2; rv:21.0) Gecko/20100101 Firefox/21.0");
      

      顺便说一句,当您为 https 方案执行 openConnection() 时,返回值为 HttpsURLConnection,它扩展了 HttpURLConnection

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-25
        • 1970-01-01
        • 1970-01-01
        • 2013-05-02
        • 2020-07-21
        • 2015-06-08
        • 2022-08-20
        • 1970-01-01
        相关资源
        最近更新 更多