2016-03-04 66 views
2

这里是我的curl命令:curl命令等同于Java的

curl https://login.xyz.com/v1/oauth/token -H "Accept: 
application/json" --data 'client_id=client_id' --data 
'client_secret=client_secret' --data 'redirect_uri=redirect_uri' 
--data 'code=code' 

我尝试后,在java中。以下是我正在试图做的事:

String resourceUrl = "https://login.xyz.com/v1/oauth/token?client_id=<client.id>&client_secret=<client.secret>&redirect_uri=https://login.xyz.com/user/login&code=<code>"; 
HttpURLConnection httpcon = (HttpURLConnection) ((new URL(resourceUrl).openConnection())); 
httpcon.setDoOutput(true); 
httpcon.setRequestProperty("Content-Type", "application/json"); 
httpcon.setRequestProperty("Accept", "application/json"); 
httpcon.setRequestMethod("POST"); 
httpcon.connect();  
System.out.println(httpcon.getHeaderField(0)); 

但我发现了HTTP/1.1 500内部服务器错误

回答

1

我没有测试,但只是通过查看文档和源代码,我可以看到你的curl命令和Java实现之间存在一些差异:

卷曲:

  • 执行后
  • Conten叔类型是application/X WWW的窗体-urlencoded

Curl manpage

-d,--data

(HTTP)发送在POST请求中的所指定的数据HTTP服务器, ,与浏览器在用户填写HTML 表单并按下提交按钮时执行的操作相同。这将导致curl将 数据传递给使用内容类型 application/x-www-form-urlencoded的服务器。与-F,--form比较。

参见:How are parameters sent in an HTTP POST request?

Java实现:

  • 执行后,但URL是GET-一样(你设置请求方法的文章,但你传递的参数中的URL查询字符串)
  • 内容类型是application/JSON

我希望这有助于。

+1

为POST需要我会怎么做:'-X/- 请求', -d - 只是一个键指定数据值 –

+1

不知道如果我同意:http://superuser.com/questions/149329/what-is-the-curl-command-line-syntax-to-do-a-post-request – Baderous

+0

看起来你是对的,'''-X'''只适用于你想发送POST而没有任何数据的情况 –

1
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.net.HttpURLConnection; 
import java.net.URL; 

public class CURLTest { 
public void main(String[] args) throws IOException { 
    sendData(); 
} 

public String sendData() throws IOException { 
// curl_init and url 


URL url = new URL("Put the Request here"); 
HttpURLConnection con = (HttpURLConnection) url.openConnection(); 

// CURLOPT_POST 
con.setRequestMethod("POST"); 

// CURLOPT_FOLLOWLOCATION 
con.setInstanceFollowRedirects(true); 

String postData = "my_data_for_posting"; 
con.setRequestProperty("Content-length", 
     String.valueOf(postData.length())); 

con.setDoOutput(true); 
con.setDoInput(true); 

DataOutputStream output = new DataOutputStream(con.getOutputStream()); 
output.writeBytes(postData); 
output.close(); 

// "Post data send ... waiting for reply"); 
int code = con.getResponseCode(); // 200 = HTTP_OK 
System.out.println("Response (Code):" + code); 
System.out.println("Response (Message):" + con.getResponseMessage()); 

// read the response 
DataInputStream input = new DataInputStream(con.getInputStream()); 
int c; 
StringBuilder resultBuf = new StringBuilder(); 
while ((c = input.read()) != -1) { 
    resultBuf.append((char) c); 
} 
input.close(); 

return resultBuf.toString(); 
} 
} 

下面是一个例子