2013-10-01 1 views
1

фона:Почему строка в URL-адресе изменяется несколькими символами после отправки запроса GET?

Я пытаюсь использовать one-api, чтобы отправить SMS на мобильные телефоны и получить статус доставки. Я делаю запрос POST на свои серверы. Затем я извлекаю строку из полученного ответа JSON. Я использую эту строку, чтобы сделать еще один запрос GET URL-адресу, содержащему этот идентификатор. Проблема в том, что строка изменяется, когда я делаю запрос GET. Хотя это так же, когда я извлекаю его из ответа, но понятия не имею, почему его изменение происходит во время запроса GET.

методология и проблема объяснения:

Ответ от исходного POST request`:

{"resourceReference": 
    {"resourceURL":"https:\/\/oneapi-gw.gsma.com:443\/SendSmsService\/OneAPI_REST_v2_0\/routing\/2_0\/smsmessaging\/outbound\/tel:7511\/requests\/998371119"} 
} 

Я извлечь ID, что я получаю в URL (998371119). Я использую .split извлечь следующим образом:

String tmp = (String)resourceReference.get("resourceURL"); 
String [] tmp2 = tmp.split("/"); 
String id = tmp2[(tmp2.length)-1].toString(); 
System.out.println(id); 
// the output is:998371119. 

Используя этот идентификатор я создаю другой адрес для отправки запроса GET.

String url2 = "https://oneapi-gw.gsma.com/smssend/2_0/smsmessaging/outbound/tel:7511/requests/"+id+"/deliveryInfos" 

Когда я отправить запрос GET, последние 2 цифры ID, кажется, автоматически изменится и я получаю Response Code как 400 после создания запроса GET. Ниже приводится поток ошибок:

{ "requestError" : 
     { "serviceException" : { 
       "text" : "Invalid input value for message part requestIdentifier", 
       "variables" : [ 
        "requestIdentifier", "998371122" 
        ]  
       } 
     } 
    } 

Обратите внимание, как сервер интерпретировать идентификатор, как 998371122 вместо 998371119 (мой первоначальный просил один). Эта последняя цифра изменилась. Я много думал, но я понятия не имею, почему это происходит. Хотя, когда я использую curl для отправки запроса GET, все работает нормально. Таким образом, это не проблема сервера. Их проблема в том, как я формирую URL-адрес или извлекаю идентификатор или создаю запрос GET. Какие-либо предложения? Заранее спасибо.

Другой соответствующий код может понадобиться

Это, как я делаю GET запрос:

private String getResponseFromGETRequest(String accept, String url) { 

    URL obj; 
    StringBuffer response = new StringBuffer();; 
    HttpURLConnection con; 
    String authHeaderValue = new String(Base64.encode(credentials.getBytes())); 
    //Credentals variable is a string storing "username:password" 
    try { 
     obj = new URL(url); 
     con = (HttpURLConnection) obj.openConnection(); 
     con.setRequestProperty ("Authorization", "Basic " + authHeaderValue); 

     // optional default is GET 
     con.setRequestMethod("GET"); 

     //add request header 
     con.setRequestProperty ("Accept", accept); 
     //con.setRequestProperty("Content-Type", accept); 

     int responseCode = con.getResponseCode(); 
     InputStream ipStream; 
     if (con.getResponseCode() >= 400) { 
      ipStream = con.getErrorStream(); 
     } else { 
      ipStream = con.getInputStream(); 
     } 

     System.out.println("Response Code : " + responseCode); 
     BufferedReader in = new BufferedReader(
       new InputStreamReader(ipStream)); 
     String inputLine; 

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

     //print result 
     System.out.println(response.toString()); 

    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     return ""; 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     return ""; 
    } 

    return response.toString(); 
} 

Logcat:

Oct 04, 2013 3:59:07 PM sun.net.www.protocol.http.HttpURLConnection plainConnect 
FINEST: ProxySelector Request for https://oneapi-gw.gsma.com/smssend/2_0/smsmessaging/outbound/tel%3A7511/requests 
Oct 04, 2013 3:59:07 PM sun.net.www.protocol.http.HttpURLConnection plainConnect 
FINEST: Proxy used: DIRECT 
Oct 04, 2013 3:59:08 PM sun.net.www.protocol.http.HttpURLConnection writeRequests 
FINE: [email protected] pairs: {POST /smssend/2_0/smsmessaging/outbound/tel%3A7511/requests HTTP/1.1: null}{Authorization: Basic ABCDEFGHMYAUTHORIZATIONKEY=}{Accept: application/json}{Content-Type: application/json}{Cache-Control: no-cache}{Pragma: no-cache}{User-Agent: Java/1.7.0_21}{Host: oneapi-gw.gsma.com}{Connection: keep-alive}{Content-Length: 212} 
Oct 04, 2013 3:59:08 PM sun.net.www.protocol.http.HttpURLConnection getInputStream 
FINE: [email protected] pairs: {null: HTTP/1.1 201 Created}{Date: Fri, 04 Oct 2013 19:59:08 GMT}{Server: Jetty(6.1.x)}{Content-Type: application/json}{Location: https://oneapi-gw.gsma.com:443/SendSmsService/OneAPI_REST_v2_0/routing/2_0/smsmessaging/outbound/tel:7511/requests/998380556}{Host: oneapi-gw.gsma.com}{X-Forwarded-Server: oneapi-gw.gsma.com}{Authorization: Basic ABCDEFGHMYAUTHORIZATIONKEY=}{User-Agent: Java/1.7.0_21}{Accept: application/json}{X-Forwarded-For: 10.90.24.132}{X-Forwarded-Host: oneapi-gw.gsma.com}{breadcrumbId: ID-dtx-prod-apihr01-39903-1371168975552-0-440221}{Vary: Accept-Encoding,User-Agent}{Keep-Alive: timeout=5, max=100}{Connection: Keep-Alive}{Transfer-Encoding: chunked} 

Oct 04, 2013 3:59:08 PM sun.net.www.protocol.http.HttpURLConnection plainConnect 
FINEST: ProxySelector Request for https://oneapi-gw.gsma.com/smssend/2_0/smsmessaging/outbound/tel:7511/requests/998380556/deliveryInfos 
Oct 04, 2013 3:59:08 PM sun.net.www.protocol.http.HttpURLConnection plainConnect 
FINEST: Proxy used: DIRECT 
Oct 04, 2013 3:59:08 PM sun.net.www.protocol.http.HttpURLConnection writeRequests 
FINE: [email protected] pairs: {GET /smssend/2_0/smsmessaging/outbound/tel:7511/requests/998380556/deliveryInfos HTTP/1.1: null}{Authorization: Basic ABCDEFGHMYAUTHORIZATIONKEY=}{Accept: application/json}{Content-Type: application/json}{Cache-Control: no-cache}{Pragma: no-cache}{User-Agent: Java/1.7.0_21}{Host: oneapi-gw.gsma.com}{Connection: keep-alive} 
Oct 04, 2013 3:59:08 PM sun.net.www.protocol.http.HttpURLConnection getInputStream 
FINE: [email protected] pairs: {null: HTTP/1.1 400 Bad Request}{Date: Fri, 04 Oct 2013 19:59:09 GMT}{Server: Jetty(6.1.x)}{Content-Type: application/json}{Accept: application/json}{Host: oneapi-gw.gsma.com}{breadcrumbId: ID-dtx-prod-apihr02-48223-1371168511818-0-440001}{X-Forwarded-Host: oneapi-gw.gsma.com}{X-Forwarded-For: 10.90.24.132}{User-Agent: Java/1.7.0_21}{X-Forwarded-Server: oneapi-gw.gsma.com}{Authorization: Basic ABCDEFGHMYAUTHORIZATIONKEY=}{Vary: Accept-Encoding,User-Agent}{Connection: close}{Transfer-Encoding: chunked} 
Header: Date : Fri, 04 Oct 2013 19:59:09 GMT 
Header: Server : Jetty(6.1.x) 
Header: Content-Type : application/json 
Header: Accept : application/json 
Header: Host : oneapi-gw.gsma.com 
Header: breadcrumbId : ID-dtx-prod-apihr02-48223-1371168511818-0-440001 
Header: X-Forwarded-Host : oneapi-gw.gsma.com 
Header: X-Forwarded-For : 10.90.24.132 
Header: User-Agent : Java/1.7.0_21 
Header: X-Forwarded-Server : oneapi-gw.gsma.com 
Header: Authorization : Basic ABCDEFGHMYAUTHORIZATIONKEY= 
Header: Vary : Accept-Encoding,User-Agent 
Header: Connection : close 
Header: Transfer-Encoding : chunked 
Response Code : 400 
{ 
    "requestError" : { 
    "serviceException" : { 
     "messageId" : "SVC0002", 
     "text" : "Invalid input value for message part requestIdentifier", 
     "variables" : [ "requestIdentifier", "998380559" ] 
    } 
    } 
} 

Edit:

+0

Вы пытались использовать такой инструмент, как [TCPMon] (http://technonstop.com/tcpmon-tutorial), чтобы проверить, что на самом деле происходит на проводе? – AbdullahC

+0

@ Hippo: Это хорошая идея. Я попробую этот инструмент и посмотрю, что происходит. Благодарю. –

+0

Добро пожаловать. Дайте нам знать, как это происходит. – AbdullahC

ответ

1

Наконец через два дня это было странное решение. Оказывается, синтаксический анализ был прекрасен, и было сформировано сообщение GET и POST. Я просто оставил 3-секундную задержку после того, как получил ответ от POST, и до того, как я отправил еще один запрос GET. Это решило это.

try { 
    Thread.sleep(3000); 
} catch(InterruptedException ex) { 
    Thread.currentThread().interrupt(); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^