0
我试图实现一个客户端,该客户端先登录并执行一些工作。 这是我的卷发要求:将curl请求转换为HttpURLConnection
curl -v https://api.example.com/api-token-auth/ \
-H "Accept: application/json" \
-d "username=myusername&password=mypassword"
我想把它转换成Java代码。这是我曾尝试:
HttpURLConnection conn;
URL obj = new URL("https://api.example.com/api-token-auth/");
URL obj = new URL(quoteURL);
conn = (HttpURLConnection) obj.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
String userpass = "username=myusername" + "&" + "password=mypassword";
String basicAuth = new String(Base64.getEncoder().encode(userpass.getBytes()));
conn.setRequestProperty("Authorization", basicAuth);
conn.setRequestProperty("Accept", "*/*");
conn.setRequestProperty("Accept-Encoding", "gzip, deflate");
conn.setRequestProperty("Accept-Language", "en;q=1, fr;q=0.9, de;q=0.8,ja;q=0.7, nl;q=0.6, it;q=0.5");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
conn.setRequestProperty("API-Version", "1.3.0");
conn.setRequestProperty("Connection", "keep-alive");
conn.setRequestProperty("Accept", "*/*");
conn.setRequestProperty("User-Agent", "Mozilla/5.0");
conn.connect();
InputStreamReader inputStreamReader = new InputStreamReader(conn.getInputStream());
BufferedReader in = new BufferedReader(inputStreamReader);
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
conn.disconnect();
return response;
然后我收到此错误:
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 400 for URL: https://api.example.com/api-token-auth/
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1839)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1440)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
我尝试了好几种可能的解决方案,但没有运气。我可以发现我做错了什么。
oh..whoops - 如果Accept:application/json很重要,那么您必须设置该报头 –
感谢您的回应,不幸的是,这并没有设置RequestReperty(“Accept”,“app/json”)工作。当我提交上面的curl请求时,我收到了一个json格式的响应,如{“token”:“234234234234234234234234234234234234234324”}。这应该很简单,但它不起作用。这部分{-d“username = myusername&password = mypassword”}具有“&”和“=”符号。这是否有关于此?我也试过“:”而不是“&”和“:”。 – celik
我更新了我的回应w /一个完整的例子 - 你的curl命令的-d参数是正确的www-form-urlencoded(同样,curl本身只是传递-d参数作为HTTP请求的主体) –