0

jSONキーと値のペアの形式で応答を読み取ろうとしています。

ブラウザを介して手動でURLをヒットするjSONと、オブジェクトを介して必要なステータスコード/応答を取得します

{"status":"0","responseCode":"1021","response":{"message":"Please check your Settings ","data":"2012-11-24, 7:28 am"}}

アプリ経由でデータを送信しようとすると、同じ期待される応答が得られません。アプリ経由でデータを送信するときのコード

[dictionnary setObject:@"admin"  forKey:@"username"];
[dictionnary setObject:@"123123" forKey:@"password"];

NSError *error = nil;

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionnary
                                                   options:kNilOptions
                                                     error:&error];

NSString *urlString = @"MY CALL URL";

NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];

[request setHTTPBody:jsonData];
NSURLResponse *response = NULL;
NSError *requestError = NULL;
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&requestError];
NSLog(@"response is obtained");

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] ;
NSLog(@"%@", responseString);

コード経由で取得している応答

<!DOCTYPE html PUBLIC
    "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>PHP notice</title>

<style type="text/css">
/*<![CDATA[*/
    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent;margin:0;padding:0;}
    body{line-height:1;}
    ol,ul{list-style:none;}
    blockquote,q{quotes:none;}
    blockquote:before,blockquote:after,q:before,q:after{content:none;}
    :focus{outline:0;}
    ins{text-decoration:none;}
    del{text-decoration:line-through;}
    table{border-collapse:collapse;border-spacing:0;}

    body {
        font: normal 9pt "Verdana";
        color: #000;
        background: #fff;
    }

    h1 {
        font: normal 18pt "Verdana";
        color: #f00;
        margin-bottom: .5em;
    }

    h2 {
        font: normal 14pt "Verdana";
        color: #800000;
        margin-bottom: .5em;
    }

    h3 {
        font: bold 11pt "Verdana";
    }

    pre {
        font: normal 11pt Menlo, Consolas, "Lucida Console", Monospace;
    }

    pre span.error {
        display: block;
        background: #fce3e3;
    }

    pre span.ln {
        color: #999;
        padding-right: 0.5em;
        border-right: 1px solid #ccc;
    }

    pre span.error-ln {
        font-weight: bold;
    }

    .container {
        margin: 1em 4em;
    }

    .version {
        color: gray;
        font-size: 8pt;
        border-top: 1px solid #aaa;
        padding-top: 1em;
        margin-bottom: 1em;
    }

    .message {
        color: #000;
        padding: 1em;
        font-size: 11pt;
        background: #f3f3f3;
        -webkit-border-radius: 10px;
        -moz-border-radius: 10px;
        border-radius: 10px;
        margin-bottom: 1em;
        line-height: 160%;
    }

    .source {
        margin-bottom: 1em;
    }

    .code pre {
        background-color: #ffe;
        margin: 0.5em 0;
        padding: 0.5em;
        line-height: 125%;
        border: 1px solid #eee;
    }

    .source .file {
        margin-bottom: 1em;
        font-weight: bold;
    }

    .traces {
        margin: 2em 0;
    }

    .trace {
        margin: 0.5em 0;
        padding: 0.5em;
    }

    .trace.app {
        border: 1px dashed #c00;
    }

    .trace .number {
        text-align: right;
        width: 2em;
        padding: 0.5em;
    }

    .trace .content {
        padding: 0.5em;
    }

    .trace .plus,
    .trace .minus {
        display:inline;
        vertical-align:middle;
        text-align:center;
        border:1px solid #000;
        color:#000;
        font-size:10px;
        line-height:10px;
        margin:0;
        padding:0 1px;
        width:10px;
        height:10px;
    }

    .trace.collapsed .minus,
    .trace.expanded .plus,
    .trace.collapsed pre {
        display: none;
    }

    .trace-file {
        cursor: pointer;
        padding: 0.2em;
    }

    .trace-file:hover {
        background: #f0ffff;
    }
    /*]]>*/
    </style>
    </head>

    <body>
    <div class="container">
        <h1>PHP notice</h1>

        <p class="message">
            Undefined index: signature  </p>

        <div class="source">
            <p class="file">/var/www/protected/controllers/Authenticate.php(955)</p>
            <div class="code"><pre><span class="ln">943</span>   

            <td class="number">
                #7          </td>
            <td class="content">
                <div class="trace-file">
                                            <div class="plus">+</div>
                        <div class="minus">–&lt;/div>
                                        &nbsp;/var/yii-1.1.10.r3566/framework/base/CApplication.php(162): <strong>CWebApplication</strong>-><strong>processRequest</strong>()               </div>

                <div class="code"><pre><span class="ln">157</span>      */
<span class="ln">158</span>     public function run()
<span class="ln">159</span>     {
<span class="ln">160</span>         if($this-&gt;hasEventHandler(&#039;onBeginRequest&#039;))
<span class="ln">161</span>             $this-&gt;onBeginRequest(new CEvent($this));
<span class="error"><span class="ln error-ln">162</span>         $this-&gt;processRequest();
</span><span class="ln">163</span>         if($this-&gt;hasEventHandler(&#039;onEndRequest&#039;))
<span class="ln">164</span>             $this-&gt;onEndRequest(new CEvent($this));
<span class="ln">165</span>     }
<span class="ln">166</span> 
<span class="ln">167</span>     /**
</pre></div>            </td>
        </tr>
                        <tr class="trace app expanded">
            <td class="number">
                #8          </td>
            <td class="content">
                <div class="trace-file">
                                            <div class="plus">+</div>
                        <div class="minus">–&lt;/div>
                                        &nbsp;/var/www/index.php(13): <strong>CApplication</strong>-><strong>run</strong>()             </div>

                <div class="code"><pre><span class="ln">08</span> defined(&#039;YII_DEBUG&#039;) or define(&#039;YII_DEBUG&#039;,true);
<span class="ln">09</span> // specify how many levels of call stack should be shown in each log message
<span class="ln">10</span> defined(&#039;YII_TRACE_LEVEL&#039;) or define(&#039;YII_TRACE_LEVEL&#039;,3);
<span class="ln">11</span> 
<span class="ln">12</span> require_once($yii);
<span class="error"><span class="ln error-ln">13</span> Yii::createWebApplication($config)-&gt;run();
</span></pre></div>         </td>
        </tr>
                </table>
    </div>

    <div class="version">
        2012-11-24 07:38:18 Apache/2.2.22 (Ubuntu) <a href="http://www.yiiframework.com/">Yii Framework</a>/1.1.10  </div>
</div>

<script type="text/javascript">
/*<![CDATA[*/
var traceReg = new RegExp("(^|\\s)trace-file(\\s|$)");
var collapsedReg = new RegExp("(^|\\s)collapsed(\\s|$)");

var e = document.getElementsByTagName("div");
for(var j=0,len=e.length;j<len;j++){
    if(traceReg.test(e[j].className)){
        e[j].onclick = function(){
            var trace = this.parentNode.parentNode;
            if(collapsedReg.test(trace.className))
                trace.className = trace.className.replace("collapsed", "expanded");
            else
                trace.className = trace.className.replace("expanded", "collapsed");
        }
    }
}
/*]]>*/
</script>

</body>
</html>
4

3 に答える 3

0

次のコードを試すことができます。

NSString *username = emailField.text;
        NSString *password = passwordField.text;
        NSMutableDictionary *dictionnary = [NSMutableDictionary dictionary];
        [dictionnary setObject:@"admin"  forKey:@"username"];
        [dictionnary setObject:@"123456" forKey:@"password"];

        NSError *error = nil;
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionnary
                                                           options:kNilOptions
                                                             error:&error];   

        NSString *urlString = @"Sample URL";

        NSURL *url = [NSURL URLWithString:urlString];
 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];

        [request setHTTPBody:jsonData];
        NSURLResponse *response = NULL;
        NSError *requestError = NULL;
        NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&requestError];
        NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding] ;
         NSLog(@"%@", responseString); 

GET リクエストの場合は、次のリンクを試していただけますか: /index.php/api/transaction/model/transactionsuccess?username=admin&password=1212‌ 3

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/index.php/api/transaction/model/transactionsuccess?username=adm‌​in&password=1212‌​3"]];

 // Perform request and get JSON as a NSData object


NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
 NSLog(@"response=%@",response ); 

このコードを使用します。

于 2012-11-24T12:24:27.627 に答える
0

URLRequest で、html は必要ないが raw json が必要であることを指定します

NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];

に:

NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];//!!!
于 2012-11-24T10:34:35.403 に答える
-1

この問題はサーバー側に関連しています。そのため、サービスのバックエンド開発者に相談する必要があります。おそらく、POST または GET を使用してサービス側でヒットしたデータを確認し、バックエンドが php の場合は、$ の代わりに $request を使用するようにアドバイスしました。 get または $post、テストするだけです。また、この事実は明らかで、ブラウザーから URL を試すと必要な json が取得されると述べましたが、POST の場合はそれができません。

これはサーバー側からのものであると100%確信しています。可能であれば、テスト認証変数を含む必要なサーバーURLを提供してください。(ブレークポイントまたはログを介して提供するパラメータで完全なURLをクロスチェックしてください。)

于 2012-11-24T10:31:09.337 に答える