HTTP Connection with Swift/PHP


HTTP Connection with Swift/PHP

每当我从我的 Swift 应用程序向我的本地服务器发送 HTTP 请求时,它总是以 500 状态、空Optional()正文和文本/html 内容类型进行响应。我是以这种方式使用 HTTP 的新手,所以我不确定错误可能在哪里。我已经安装了pecl-http,并且(我认为(我已经正确配置了它。我也(认为(我在 PHP 代码中正确设置了正文和内容类型。我按照本教程的 Swift 部分编写了我的 Swift 代码,并自己创建了 PHP;我只是不知道问题出在哪里。我认为我的错误在于发送/接收响应,所以这就是我附加的代码。

HTTP响应

Response: <NSHTTPURLResponse: 0x7f8b44828b80> { URL: http://localhost/practicejournal/includes/php/json_login.php } { status code: 500, headers {
    Connection = close;
    "Content-Length" = 0;
    "Content-Type" = "text/html";
    Date = "Sun, 21 Dec 2014 17:12:53 GMT";
    Server = "Apache/2.4.9 (Unix) PHP/5.5.14";
    "X-Powered-By" = "PHP/5.5.14";
} }
Body: Optional()
The operation couldn’t be completed. (Cocoa error 3840.)
Error could not parse JSON: 'Optional()'

快速代码接收响应

var task = session.dataTaskWithRequest(request, completionHandler: {data, response,     error -> Void in
        println("Response: '(response)")
        var strData = NSString(data: data, encoding: NSUTF8StringEncoding)
        println("Body: '(strData)")
        var err: NSError?
        var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error: &err) as? NSDictionary
        if(err != nil) {
            println(err!.localizedDescription)
            let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding)
            println("Error could not parse JSON: ''(jsonStr)'")
        } else {
            if let parseJSON = json {
                var success = parseJSON["success"] as? Int
                println("Success '(success)")
            } else {
                let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding)
            }
        }
    })

PHP 代码发送响应

//If Login is successful
$conn = null;
$success = 1;
HttpResponse::status(200);
HttpResponse::setContentType("application/json");
HttpResponse::setData($success);
HttpResponse::send();
//If Login is unsuccessful
function loginError() {
    $conn = null;
    $sucsess = 0;
    HttpResponse::status(200);
    HttpResponse::setContentType("application/json");
    HttpResponse::setData($success);
    HttpResponse::send();
}

在 PHP 中打开错误报告。请参阅如何显示 PHP 错误?

显然,您只是有一个错误,该错误阻止

了PHP正常运行,但是PHP配置为不向您发送错误信息。显然,$sucsess引用是错误的,但也可能存在其他问题。(你只分享了一点 PHP,所以无法知道还有什么可能潜伏在那里。通过更改 php.ini 以显示错误,您不必猜测问题的根源是什么。

我采取了多个步骤来使代码正常工作:

1(错误的pecl_http版本:我有v2,它不支持PHP HTTP扩展文档中的功能。我必须下载并安装 v1 才能使用文档中的功能。

2(未正确处理POST请求:一旦连接正常工作,我需要获取请求正文,对其进行解码,并将其分配给$username$password变量。

$body = http_get_request_body();
$body = json_decode($body);
$username = $body->{"username"};
$password = $body->{"password"};

3(没有正确发送响应:我不需要为HttpResponse调用所有这些方法,我只需要设置内容类型,然后回显$success

HttpResponse::setContentType("application/json");
echo $success;