为啥我的代码返回 403 禁止访问
Posted
技术标签:
【中文标题】为啥我的代码返回 403 禁止访问【英文标题】:why my code is returning 403 forbidden acess为什么我的代码返回 403 禁止访问 【发布时间】:2014-02-25 18:40:52 【问题描述】:我正在尝试使用 java 发出一个 http get 请求,当我执行代码时,我得到了403 forbidden
code。有什么办法可以摆脱它吗?我的代码是
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) 使用curl
或 wget
的命令行成功访问该 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 禁止访问的主要内容,如果未能解决你的问题,请参考以下文章