Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用HttpURLConnection让这篇HTTP/1.1文章在Java中工作?_Java_Http Post_Httpurlconnection - Fatal编程技术网

如何使用HttpURLConnection让这篇HTTP/1.1文章在Java中工作?

如何使用HttpURLConnection让这篇HTTP/1.1文章在Java中工作?,java,http-post,httpurlconnection,Java,Http Post,Httpurlconnection,我正试图使用HttpURLConnection向发送一篇HTTP/1.1文章,以便使用我的用户名和密码登录网站 出于某种原因,它看起来像是没有将byte[]postData发送到服务器 我收到了响应代码和消息200 OK,但服务器以JSON格式的错误消息{“err”:“请键入id和密码”}进行响应,就好像我从未实际发送过数据一样 我尝试了不同的方法(使用不同的输出写入程序发送字符串,字节[]等)来发送数据,但到目前为止,没有一种方法有效,我无法确定它到底在哪里失败 下面是我正在使用的代码片段:

我正试图使用
HttpURLConnection
向发送一篇HTTP/1.1文章,以便使用我的用户名和密码登录网站

出于某种原因,它看起来像是没有将
byte[]postData
发送到服务器

我收到了响应代码和消息200 OK,但服务器以JSON格式的错误消息{“err”:“请键入id和密码”}进行响应,就好像我从未实际发送过数据一样

我尝试了不同的方法(使用不同的输出写入程序发送
字符串
字节[]
等)来发送数据,但到目前为止,没有一种方法有效,我无法确定它到底在哪里失败

下面是我正在使用的代码片段:

package post;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.Charset;

public class PostTest {

    public static void login() throws MalformedURLException, IOException {
        String urlParameters = String.format("id=%s&password=%s", 
                URLEncoder.encode(Config.getProperty("account.1.username"), "UTF-8"), 
                URLEncoder.encode(Config.getProperty("account.1.password"), "UTF-8")
        );

        byte[] postData = urlParameters.getBytes(Charset.forName("UTF-8"));

        URL url = new URL(Config.getProperty("login.url"));
        HttpURLConnection httpConn = (HttpURLConnection)url.openConnection();
        httpConn.setDoInput(true);
        httpConn.setDoOutput(true);
        httpConn.setUseCaches(false);
        httpConn.setRequestMethod("POST");
        httpConn.setRequestProperty("Content-Length", 
                    Integer.toString(postData.length));

        //prints: 26
        System.out.println(postData.length);
        //prints: id=test&password=123456789
        System.out.println(urlParameters);

        httpConn.getOutputStream().write(postData);
        httpConn.getOutputStream().flush();

        try (BufferedReader reader = new BufferedReader(
                new InputStreamReader(httpConn.getInputStream()))) {
            for (String line; (line = reader.readLine()) != null;)
                System.out.println(line);
        }
    }
}
实时HTTP头文件(Firefox插件)输出:

编辑:添加了Firefox“实时HTTP头文件”输出,我用它来查看通过POST发送的数据

我认为
byte[]postData
没有正确发送(如果有的话)是正确的吗


要使登录正常工作,我必须做哪些更改?

嗯,我终于注意到了我的错误。因此,我使用localhost/test.php尝试了第一次登录,其中参数是
password=
,我完全忽略了我发送数据到的实际网站使用的是
pw=


String.format(“id=%s&password=%s”,[…])
更改为
String.format(“id=%s&pw=%s”,[…]
它工作起来很有魅力。

嗯,我终于注意到了我的错误。因此,我尝试使用localhost/test.php进行第一次登录,其中参数是
password=
我完全忽略了我发送数据到的实际网站使用的是
pw=


String.format(“id=%s&password=%s”,[…]
更改为
String.format(“id=%s&pw=%s”,[…]
后,它就像一个符咒一样工作。

POST数据不是以URL编码格式发送的;GET数据是。好的,很高兴知道,谢谢。不过,删除
urlcoder.encode()
仍然会导致相同的错误回复。我猜用户名和密码的值没有像您所想的那样发送。请检查另一个SO答案-URLEncoder所做的只是…编码。它不会神奇地将URL字符串变成POST请求的样子。POST数据不是以URL编码的格式发送的;GET数据是。好的,很高兴知道,谢谢。不过,删除
URLEncoder.encode()
仍然会导致相同的错误回复。我猜用户名和密码的值没有按照您的想法发送。请检查另一个SO答案-URLEncoder所做的只是…编码。它不会神奇地将URL字符串变成POST请求的样子。
POST /io/login HTTP/1.1
Host: uploaded.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: text/javascript, text/html, application/xml, text/xml, */*
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequest
X-Prototype-Version: 1.6.1
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://uploaded.net/
Content-Length: 20
Cookie: __utma=9[censored...]
Connection: keep-alive
  id=test&pw=123456789

HTTP/1.1 200 OK
[...]