2016-03-04 141 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(); 
} 
} 

下面是一個例子