gpt4 book ai didi

ios - Swift 3 无法读取 HTTP Post 请求数据

转载 作者:行者123 更新时间:2023-11-30 12:26:02 25 4
gpt4 key购买 nike

我一直在尝试通过 Http“POST”方法获取数据。在我的 php 脚本中,我有一个关键调用“categoryWise”,它有一个名为“flower”的值。我放置了所有必要的代码,但它没有工作并说无法读取数据,因为它的格式不正确。请帮忙。

    let values = "categoryWise= nature"

let parameter = values.data(using: .utf8)


let url = "https://mahadehasancom.000webhostapp.com/WallpaperApp/php_scripts/getImageByCategory.php"

var request = URLRequest(url: URL(string: url)!)
request.httpMethod = "POST"
request.httpBody = parameter

request.setValue("application/x-content-type-options", forHTTPHeaderField: "Content-Type")
request.setValue("application/x-content-type-options", forHTTPHeaderField: "Accept")


let task = URLSession.shared.dataTask(with: request) { (data, response, error) in

if (error != nil)
{
print(error!)
}
else
{
do
{
let fetchData = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
//print(fetchData)
let actorArray = fetchData?["result"] as? NSArray
for actor in actorArray!
{
let nameDict = actor as? NSDictionary

let name = nameDict?["date"] as! String
let countryname = nameDict?["category"] as! String
let imageUrl = nameDict?["url"] as! String
//let pageUrl = nameDict?["url"] as! String

authorArray.append(name)
titleArray.append(countryname)
imageURL.append(imageUrl)
//urlArray.append(pageUrl)

}

DispatchQueue.main.async {
self.CountryNameTable.reloadData()
}

print(authorArray)
print(titleArray)
print(imageURL)
print(urlArray)
}

catch let Error2
{
print(Error2.localizedDescription)

if let string = String(data: data!, encoding: .utf8)
{
print(string)
print(response!)
}
}

}
}

task.resume()

最佳答案

一些观察:

  1. 您共享了使用 $_POST 的 PHP。这意味着它正在等待 x-www-form-urlencoded 请求。因此,在 Swift 中,您应该将请求的 Content-Type 设置为 application/x-www-form-urlencoded 因为这就是您要发送的内容。同样,在 Swift 中,请求的 Accept 应该是 application/json 因为您的代码将“接受”(或期望)JSON 响应。

    <
  2. 您提供的values 字符串中包含空格。您在 x-www-form-urlencoded 请求中发送的键值对中不能有空格。 (请注意,如果您的 key 对中有任何非字母数字字符,则应对它们进行百分比编码。)

  3. 在 Swift 错误处理程序中,除了打印 错误 之外,您可能还想尝试将 data 转换为 String >,并查看其内容,例如

    if let string = String(data: data!, encoding: .utf8) {
    print(string)
    }
  4. 您可能还想查看响应并查看它报告的statusCode内容。完成此操作后,您随后告诉我们它报告的 statusCode 为 500。

    状态代码 500 表示 Web 服务中存在一些内部错误。 (如果成功,代码为 200。)这通常是由于未正确处理请求而出现某些错误的结果。例如,如果请求忽略了正确格式化请求,并且 Web 服务未预见/捕获该请求,或者 Web 服务器上存在其他内部错误,则您可能会收到 500 错误代码。有关状态代码列表,请参阅http://w3.org/Protocols/rfc2616/rfc2616-sec10.html .

  5. 如果您的网络服务响应正文中的文本不具有说明性,您可能需要打开错误报告(请参阅 How to get useful error messages in PHP?How do I catch a PHP Fatal Error ),然后查看响应正文再次。例如,您可以在 PHP 中包含以下内容:

    <?php

    function __fatalHandler() {
    $error = error_get_last();
    //check if it's a core/fatal error, otherwise it's a normal shutdown
    if ($error !== NULL && in_array($error['type'], array(E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING))) {
    header("Content-Type: application/json");
    $result = Array("success" => false, "error" => $error);
    echo json_encode($result);
    die;
    }
    }
    register_shutdown_function('__fatalHandler');
    // the rest of your PHP here
    ?>

关于ios - Swift 3 无法读取 HTTP Post 请求数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44209093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com