【问题标题】:HTTP Post request in Java for facebook is not working properly?facebook 的 Java 中的 HTTP Post 请求无法正常工作?
【发布时间】:2017-10-04 03:05:04
【问题描述】:

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

    String query = "email="+URLEncoder.encode("myemailaddress@gmail.com","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)

【问题讨论】:

  • 这段代码有什么问题?
  • 请提供更多细节。什么不能正常工作,即您希望这段代码做什么以及它实际做什么?阅读help center,了解更多关于如何提出好问题的信息。
  • 输出应显示搜索电子邮件地址结果的 html 代码(例如 myemailaddress@gmail.com),但它显示用于搜索帐户的默认 url 的代码
  • 也许它没有将电子邮件作为输入

标签: java web http-post


【解决方案1】:

我对您的代码进行了以下 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 不会设置从原始响应中获取的 cookie,除非您这样做 (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("myemailaddress@gmail.com", "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());

【讨论】:

  • 我使用了 Apache HttpClient 并且成功了,可能是它包含 cookie 管理器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-11
  • 1970-01-01
相关资源
最近更新 更多