为啥我的代码返回 403 禁止访问

Posted

技术标签:

【中文标题】为啥我的代码返回 403 禁止访问【英文标题】:why my code is returning 403 forbidden acess为什么我的代码返回 403 禁止访问 【发布时间】:2014-02-25 18:40:52 【问题描述】:

我正在尝试使用 java 发出一个 http get 请求,当我执行代码时,我得到了403 forbiddencode。有什么办法可以摆脱它吗?我的代码是

 import java.io.BufferedReader;
 import java.io.InputStreamReader;
 import java.net.*;


public class Http 
private final String USER_AGENT = "Mozilla/5.0";
public static void main(String [] args)

    Http http=new Http();
    try 
        http.get();
     catch (Exception e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
    


private void get() throws Exception
    URL ob=new URL("http://www.google.com/search?q=vamsi");
    HttpURLConnection con=(HttpURLConnection) ob.openConnection();
    con.setRequestMethod("GET");
    con.setRequestProperty("USER_AGENT", USER_AGENT);
    int responseCode=con.getResponseCode();
    System.out.println("Response code is "+responseCode);
    BufferedReader buf=new BufferedReader(new InputStreamReader(con.getInputStream()));
    String input;
    StringBuffer response =new StringBuffer();
    while((input=buf.readLine())!=null)
        response.append(input);

    
    buf.close();

    System.out.println(response.toString());
   



【问题讨论】:

我们能否假设您可以通过 (a) 浏览器和 (b) 使用 curlwget 的命令行成功访问该 URL? 【参考方案1】:

如果您在其 API 和服务条款之外执行此操作,Google 搜索将拒绝您的请求。

$ wget http://www.google.com/search?q=vamsi
Resolving www.google.com (www.google.com)... 74.125.225.212, 74.125.225.210, 74.125.225.211, ...
Connecting to www.google.com (www.google.com)|74.125.225.212|:80... connected.
HTTP request sent, awaiting response... 403 Forbidden
2014-02-01 23:21:08 ERROR 403: Forbidden.

他们可能正在查看您的 User-Agent 标头。如果您添加一个类似于浏览器的浏览器,它可能可以工作,尽管您正在规避服务条款并寻求不受支持的行为。 (对不起,我也试过一次。)

另见Why does Google Search return HTTP Error 403?

仅供参考,这是主要搜索引擎(Google、Bing、Yahoo)的常见限制。您可以通过编程方式查询一些内容;你将不得不使用这些。

【讨论】:

"...虽然你真的进入了未定义的行为" - 并且违反了他们的 ToS! 警告: - Google 有权将您的 IP 地址列入黑名单,以欺骗您的 User-Agent 以规避 ToS 限制。 我认为你是对的,我尝试使用名为 Poster 的 FF 插件并设置标题:User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/32.0.1700.102 Safari/537.36 并得到 200OK 响应 @Paul: 老兄有办法欺骗吗? @VamsiPavanMahesh - 老兄。你不想那样做。说真的! @StephenC:我的意思是,我只是想知道一种方法,如果我能做到的话..只是为了知识!【参考方案2】:

这是解决方案:

con.setRequestProperty("User-Agent", USER_AGENT);

【讨论】:

您在代码中输入了“USER_AGENT”,但应该是“User-Agent”;这解决了问题。

以上是关于为啥我的代码返回 403 禁止访问的主要内容,如果未能解决你的问题,请参考以下文章

为啥我得到 403 禁止?

HTTP 错误 403.9 - 禁止访问:连接的用户过多

间歇性 HTTP 403 禁止错误调用相同的 Ajax 代码

KeyCloak用户rest api返回403禁止,为啥?

HTTP错误403.14 - 访问网站时出现禁止错误

AWS 部署 403 被禁止