1

バックグラウンド:

SMS を電話に送信し、配信ステータスを受信するために、one-apiを使用しようとしています。私はPOST彼らのサーバーにリクエストを出します。JSON次に、受信した応答から文字列を抽出します。GETその文字列を使用して、その ID を含む URL に別のリクエストを作成します。GET問題は、リクエストを行うと文字列が変更されることです。レスポンスから抽出しても同じですが、GETリクエストの過程でなぜ変化するのかわかりません。

従った方法論と問題の説明:

最初のリクエスト` からのレスポンスPOST:

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

IDURL(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.

この ID を使用して、GET 要求を送信する別の URL を作成します。

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

リクエストを送信するとGET、IDの下2桁が自動的に変わるようで、GETリクエストを行った後にResponse Codeasを受け取ります。400エラー ストリームは次のとおりです。

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

サーバーが IDを(最初に要求したもの)998371122ではなく、どのように解釈したかに注目してください。998371119最後の 2 桁が変更されました。いろいろ考えましたが、なぜそうなったのかわかりません。リクエストcurlを送信するために使用しているときは、すべて正常に機能します。GETしたがって、サーバーの問題ではありません。URLの作成方法、IDの抽出方法、または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();
}

ログキャット:

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: sun.net.www.MessageHeader@7f47e35410 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: sun.net.www.MessageHeader@75240d4a17 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: sun.net.www.MessageHeader@71d198cb9 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: sun.net.www.MessageHeader@778671cd15 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" ]
    }
  }
}

編集:

4

1 に答える 1

1

最終的に2日後、それは奇妙な解決策でした. 構文解析は正常でありGETPOSTリクエストの形成も正常であることがわかりました。リクエストからの応答を受け取った後、POST別のリクエストを送信する前に、3 秒の遅延を維持しましたGET。これで解決しました。

try {
    Thread.sleep(3000);
} catch(InterruptedException ex) {
    Thread.currentThread().interrupt();
}
于 2013-10-04T19:36:34.023 に答える