使用 URLSession 将数据获取到 PHP 方法 - swift

Posted

技术标签:

【中文标题】使用 URLSession 将数据获取到 PHP 方法 - swift【英文标题】:GET data to PHP method using URLSession - swift 【发布时间】:2019-01-10 09:35:06 【问题描述】:

我正在尝试将一些数据从我的应用程序传递到 php 脚本,但它总是像 Could not connect to server 一样返回失败。

但是当我将链接复制到浏览器时,它像往常一样正常工作。我不知道为什么它在我的 ios 应用中不起作用。

这就是我使用 URLSession 发送请求的方式

guard let url = URL(string: "http://127.0.0.1:8000/app.php?token=\(deviceToken)") else 
        return
    
var request = URLRequest(url: url.absoluteURL)
    request.httpMethod = "GET"
    let task = URLSession.shared.dataTask(with: request)  (data, response, error) in
        if error == nil 
            guard let dataReq = data else 
                completionHandler(false, (error?.localizedDescription)!)
                return
            
            do 
                let json = try JSONSerialization.jsonObject(with: dataReq, options: JSONSerialization.ReadingOptions.mutableContainers) as? [String:Any]
                if let jsonData = json 
                    print("===== This is jsonData \(jsonData) =====")
                 else 
                    print("===== Cannot Get JSONDATA =====")
                
             catch 
                completionHandler(false, (error.localizedDescription))
            

         else 
            print("===== Error SENDING REQUEST \((error?.localizedDescription)!)")
            completionHandler(false, (error?.localizedDescription)!)
        
    
    task.resume()

我想将名为 token 的参数传递给我的 php 脚本

这是我的 php 文件

<?php

  $device = $_GET['token'];
  $deviceToken = $device;


  echo $device;

【问题讨论】:

127.0.0.1 是本地环回地址。我怀疑这会在模拟器中工作,它会指向设备而不是计算机。找到您的本地 IP 地址并尝试...可能从 192 开始。某事 @Scriptable 127.0.0.1 是我的本地 IP 地址。我也在我的实际设备上运行它。 您可以在没有任何互联网连接的情况下拥有127.0.0.1 地址。它是一个特殊的 IP 地址,我认为它不会起作用。它不起作用的事实应该足以让您尝试。您的实际设备通过互联网连接,无法通过127.0.0.1 地址连接到您的计算机 在你的mac终端窗口中输入ifconfig,你会看到多个网络接口。您将有一个127.0.0.1 可能称为lo0,并且可能会有其他类似en0 的IP 地址将有另一个IP 地址,如192.168.0.3。试试192地址 和往常一样,删除数据任务中的options参数。 .mutableContainers 在 Swift 中毫无意义。 URLRequest 也是多余的。只需将 URL 传递给数据任务。 GET 请求是默认的。 【参考方案1】:

您正在使用无法通过物理设备或模拟器工作的本地环回 IP 地址。

在您的 mac 终端窗口中键入 ifconfig,您将看到多个网络接口。您将拥有一个 127.0.0.1 可能称为 lo0 并且可能会有像 en0 这样的其他 IP 地址,例如 192.168.0.3

您将需要使用本地192. 地址连接到同一网络上的本地计算机。

【讨论】:

以上是关于使用 URLSession 将数据获取到 PHP 方法 - swift的主要内容,如果未能解决你的问题,请参考以下文章

使用 URLSession 和 ViewModel 检索数据

由于“错误:‘URLSession’类型的值没有成员‘数据’”,将 Vapor 应用程序部署到 Heroku 失败

如何使用 Swift URLSession 通过 REST api 将图像和其他参数作为表单数据发布?

使用 URLSession 和 Codable 解析 JSON 数据

Swift UrlSession 在 UrlSession 中不起作用

如何解决使用 URL Session 获取数据的问题?