Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.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
Java-连接到Amazon_Java_Networking_Httpurlconnection_Urlconnection - Fatal编程技术网

Java-连接到Amazon

Java-连接到Amazon,java,networking,httpurlconnection,urlconnection,Java,Networking,Httpurlconnection,Urlconnection,我正在使用以下代码尝试通过Amazon连接到associates程序: public static Session login(final Account account) throws IOException{ final HashMap<String, String> info = new HashMap<String, String>(); final URL url = new URL("https://affiliate-program.

我正在使用以下代码尝试通过Amazon连接到associates程序:

    public static Session login(final Account account) throws IOException{
    final HashMap<String, String> info = new HashMap<String, String>();
    final URL url = new URL("https://affiliate-program.amazon.com/");
    final HttpURLConnection connection = (HttpURLConnection)(account.isProxySet() ? url.openConnection(account.getProxy()) : url.openConnection());
    connection.setUseCaches(false);
    connection.setDoOutput(true);
    connection.setDoInput(true);
    connection.setReadTimeout(timeout);
    connection.setConnectTimeout(timeout);
    connection.setRequestMethod("POST");
    connection.addRequestProperty("User-Agent", account.getUserAgent());
    connection.addRequestProperty("User-Content", "text/plain");
    connection.setAllowUserInteraction(true);
    final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
    final Scanner reader = new Scanner(connection.getInputStream());
    while(reader.hasNextLine()){
        final String line = reader.nextLine().trim();
        if(line.contains("<input type=\"hidden\"")){
            final String[] split = line.split("\"");
            info.put(split[3], split[5]);
        }
    }
    String writable = "";
    final Iterator<String> iterator = info.keySet().iterator();
    while(iterator.hasNext()){
        final String key = iterator.next();
        writable += String.format("%s=%s", URLEncoder.encode(key, "UTF-8"), URLEncoder.encode(info.get(key), "UTF-8"));
        if(iterator.hasNext()) writable += "&";
    }
    final String data = String.format("%s&email=%s&password=%s&submit=Sign In", writable, URLEncoder.encode(account.getEmail(), "UTF-8"), URLEncoder.encode(account.getPass(), "UTF-8"));
    System.out.println(data);
    writer.write(data);
    writer.flush();
    writer.close();
    connection.getInputStream().read();
    System.out.println(connection.getURL().toString());
    return new Session(account);
}
公共静态会话登录(最终帐户)引发IOException{
final HashMap info=新HashMap();
最终URL=新URL(“https://affiliate-program.amazon.com/");
最终的HttpURLConnection连接=(HttpURLConnection)(account.isProxySet()?url.openConnection(account.getProxy()):url.openConnection());
connection.setUseCaches(false);
connection.setDoOutput(真);
connection.setDoInput(true);
connection.setReadTimeout(超时);
connection.setConnectTimeout(超时);
connection.setRequestMethod(“POST”);
connection.addRequestProperty(“用户代理”,account.getUserAgent());
addRequestProperty(“用户内容”、“文本/普通”);
connection.setAllowUserInteraction(true);
final BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(connection.getOutputStream());
最终扫描仪阅读器=新扫描仪(connection.getInputStream());
while(reader.hasNextLine()){
最后一行字符串=reader.nextLine().trim();

如果(行)包含(“一个问题是:

    writer.write(URLEncoder.encode(data, "UTF-8"));
将用URL转义符替换所有的符号和等号,因此不要发布类似的内容:

a=b&c=d&e=f
a%3Db%26c%3Dd%26e%3Df
您发布的内容如下:

a=b&c=d&e=f
a%3Db%26c%3Dd%26e%3Df
这实际上是垃圾


你需要分别对各个组件执行URL编码,然后将结果与
=
&

组合起来。哦,我从来没有考虑过这一点,好吧,谢谢,我会尝试一下,然后重新发布新的代码。好吧,我有另一个“理论”,我也相信它出于某种原因甚至没有写任何数据我在我的读者之前初始化了我的作者,而URLConnection是基于“请求-响应”方法的,这意味着您将编写数据并读取响应,但我做的是相反的,所以我不确定它是否真的在编写。