2016-04-09 2 views
1

У меня есть локон запрос, который выглядит, как показано ниже: -Https Запрос работает с завитком, но не суметь с HttpsURLConnection

curl -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '{"Request": {"Orders":[{"id_sales_order": 160407400833822,"address_billing": {"first_name":"John","last_name": "Doe","phone": "1234567","phone2": "1234","address1": "Sesamestreet 123","city": "Berlin","postcode": "12345","country": "Germany"}}]}}' "https://debraj:[email protected]/oms-api/?Action=UpdateOrderInformation&ServiceName=OMS&Signature=e436d6c7c930fa37a30a8b67051cb4531dad92b0c904a5a009bb4529a762dcd7&Timestamp=2016-04-09T19%3A14%3A12%2B0530&Version=1.0" 

Это дает выход: -

{"ErrorResponse":{"Head":{"RequestAction":"UpdateOrderInformation","ErrorType":"Sender","ErrorCode":0,"ErrorMessage":"Some elements were not processed"},"Body":{"UpdateOrderInformation":[{"ErrorCode":null,"ErrorMessage":"Order with source id: 160407400833822 was not found","Position":0}]}}} 

Чтобы реализовать это в Java У меня есть ниже java-код. Но код Java не ведет себя так, как ожидалось. Может ли кто-нибудь сообщить мне, что я делаю неправильно?

public class CurlMain { 

    public static void main(String[] args) throws Exception { 
    String url = "https://example.com/oms-api/"; 
    URL obj = new URL(url); 
    HttpsURLConnection con = (HttpsURLConnection) obj.openConnection(); 

    con.setRequestMethod("POST"); 
    String authStr = String.format("%s:%s", "debraj", "debrajmanna"); 
    String body = "{'Request': {'Orders':[{'id_sales_order': 160407400833822,'address_billing': {'first_name':'John','last_name': 'Doe','phone': '1234567','phone2': '1234','address1': 'Sesamestreet 123','city': 'Berlin','postcode': '12345','country': 'Germany'}}]}}"; 
    String encodedAuthStr = Base64.getEncoder().encodeToString(authStr.getBytes(StandardCharsets.UTF_8)); 
    con.setRequestProperty("Authorization", "Basic " + encodedAuthStr); 
    con.setRequestProperty("Content-Type", "application/json"); 
    con.setRequestProperty("Accept", "application/json"); 

    String urlParameters = "Action=UpdateOrderInformation&ServiceName=OMS&Signature=e436d6c7c930fa37a30a8b67051cb4531dad92b0c904a5a009bb4529a762dcd7&Timestamp=2016-04-09T19%3A14%3A12%2B0530&Version=1.0"; 

    // Send post request 
    con.setDoOutput(true); 
    DataOutputStream wr = new DataOutputStream(con.getOutputStream()); 
    wr.writeBytes(urlParameters); 
    wr.writeBytes(body); 
    wr.flush(); 
    wr.close(); 

    int responseCode = con.getResponseCode(); 
    HttpsURLConnection.setFollowRedirects(true); 
    Map<String, List<String>> headers = con.getHeaderFields(); 
    System.out.println(headers.toString()); 

    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); 
    String inputLine; 
    StringBuffer response = new StringBuffer(); 

    while ((inputLine = in.readLine()) != null) { 
     response.append(inputLine); 
    } 
    in.close(); 

    System.out.println("Curl Response " + response.toString()); 
    } 

в то время как код Java печатает: -

{"ErrorResponse":{"Head":{"RequestAction":"","ErrorType":"Sender","ErrorCode":"9","ErrorMessage":"E009: Access Denied"},"Body":""}} 

У меня нет доступа к коду сервера или конфигурации сервера. Моя цель - отправить один и тот же запрос curl через код Java и получить тот же ответ.

Я использую Java 8.

Я пропускаю что-нибудь?

+0

«код не ведет себя, как ожидалось» ??? объясните, что вы ожидаете, и получите. – ben75

+0

Я обновил вопрос. Надеюсь, на этот раз я ясно. – tuk

+0

Возможно, мне что-то не хватает, но есть ли какая-нибудь причина для переноса con.getOutputStream() в DataOutputStream? – ben75

ответ

0

Добавляя параметры запроса в URL решить вопрос, как показано ниже: -

URL obj = new URL(new StringBuilder(url).append("?").append(urlParameters).toString()); 
... 
//wr.writeBytes(urlParameters); 
Смежные вопросы