2017-05-05 114 views
-2

String httpsURL =“https://m.facebook.com/login/identify/?ctx=recover&c=https%3A%2F%2Fm.facebook.com%2Flogin%2F&lwv=100&_rdr”;Java for Facebook中的HTTP发布请求无法正常工作?

String query = "email="+URLEncoder.encode("[email protected]","UTF-8"); 

    URL myurl = new URL(httpsURL); 
    HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection(); 
    con.setRequestMethod("POST"); 
    con.setRequestProperty("Content-length", String.valueOf(query.length())); 
    con.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); 
    con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0;Windows98;DigExt)"); 
    con.setDoOutput(true); 
    con.setDoInput(true); 

    DataOutputStream output = new DataOutputStream(con.getOutputStream()); 


    output.writeBytes(query); 

    output.close(); 

    DataInputStream input = new DataInputStream(con.getInputStream()); 



    for(int c = input.read(); c != -1; c = input.read()) 
     System.out.print((char)c); 
    input.close(); 

    System.out.println("Resp Code:"+con .getResponseCode()); 
    System.out.println("Resp Message:"+ con .getResponseMessage()); 
    ![enter image description here](https://i.stack.imgur.com/gVUc3.png)![enter image description here](https://i.stack.imgur.com/3RihL.png) 
+0

你对这段代码有什么问题? – Vasan

+0

请提供更多细节。什么工作不正常,即你期望这个代码做什么,它实际上做了什么?阅读[帮助]了解如何提出良好问题的更多信息。 – Gumbo

+0

输出应显示搜索电子邮件地址结果的html代码([email protected]),但它显示用于搜索帐户的默认url的代码 –

回答

0

我作出了以下2修改代码,使其工作:

1)从URL的末尾删除了_rdr参数。看起来像当你添加它时,它总是将你重定向到初始页面。所以:

String httpsURL = "https://m.facebook.com/login/identify/?ctx=recover&c=https%3A%2F%2Fm.facebook.com%2Flogin%2F&lwv=100";

2)以下的重定向,HttpsURLConnection的不把它从原来的响应得到了饼干,除非你做这个(More info):

CookieHandler.setDefault(new CookieManager());

把这两在一起,我们在下面有最后的工作代码。这是一个working demo。我添加了BufferedReader来读取稍微好看的控制台输出的响应,但这不是必需的。

String httpsURL = "https://m.facebook.com/login/identify/?ctx=recover&c=https%3A%2F%2Fm.facebook.com%2Flogin%2F&lwv=100"; 

    String query = "email=" + URLEncoder.encode("[email protected]", "UTF-8"); 
    CookieHandler.setDefault(new CookieManager()); 

    URL myurl = new URL(httpsURL); 
    HttpsURLConnection con = (HttpsURLConnection) myurl.openConnection(); 
    con.setRequestMethod("POST"); 
    con.setRequestProperty("Content-length", String.valueOf(query.length())); 
    con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
    con.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0;Windows98;DigExt)"); 
    con.setDoOutput(true); 
    con.setDoInput(true); 

    DataOutputStream output = new DataOutputStream(con.getOutputStream()); 


    output.writeBytes(query); 

    output.close(); 

    BufferedReader input = new BufferedReader(new InputStreamReader(con.getInputStream())); 



    for (int c = input.read(); c != -1; c = input.read()) 
    System.out.print((char) c); 
    input.close(); 

    System.out.println("Resp Code:" + con.getResponseCode()); 
    System.out.println("Resp Message:" + con.getResponseMessage()); 
+0

我使用Apache HttpClient And它的工作,可能是它包括cookie管理器 –