簡體   English   中英

通過鍵值對讀取jSON對象請求

[英]Reading jSON object request via key-value pair

我正在嘗試以jSON對的形式讀取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">–</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">–</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>

在您的URLRequest中指定您不想要html但您想要原始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"];//!!!

您可以嘗試以下代碼,可能會對您有所幫助。

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 ); 

並使用此代碼。

這個問題與服務器端有關。 因此,您必須咨詢服務的后端開發人員,並且更有可能,在服務端使用POST或GET檢查數據命中率,以及后端是否為php,因此請稍候建議他使用$ request而不是$ get或$ post,只是為了測試。 同樣,這一事實很明顯,正如您提到的那樣,當您嘗試從瀏覽器訪問url時,會獲得所需的json,但是在POST的情況下,您將永遠無法做到這一點。

我100%確信這是從服務器端開始的。如果可能,請向我提供所需的服務器URL和測試身份驗證變量。 (通過斷點或日志提供的參數對完整的URL和參數進行交叉檢查。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM