Java-连接到Amazon
我正在使用以下代码尝试通过Amazon连接到associates程序: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.
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是基于“请求-响应”方法的,这意味着您将编写数据并读取响应,但我做的是相反的,所以我不确定它是否真的在编写。