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

标签 ios swift http post

我一直在尝试通过 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/

相关文章:

DrawerController 的 iOS 状态恢复问题

ios - 使用 HTML 5 和 IOS 资源

ios - 体系结构的 undefined symbol x86_64 : "_OBJC_CLASS_$_UIPointerShape", "_OBJC_CLASS_$_UIPointerStyle"

swift - Firebase 之类的系统无法正常工作

iOS 如何让 MapKit 显示自定义室内地图?

ios - adjustsFontSizeToFitWidth 在 iOS 14 上与 NSMutableAttributedString 无法正常工作

ios - swift 将数据发送到Apple Watch

http - If-Unmodified-Since HTTP Header 有什么用?

perl - HTTP::Daemon:如何在 HTTP-Header 中为服务器设置自定义值?

java - 如何使用 Jersey 发布字符串数组