在 Swift 中发送 HTTP 请求并收到 1001、999 错误
Sending a HTTP request in Swift and getting 1001, 999 errors
我得到了以下代码行,旨在向 Java 中的 IP 发送一个值。按照我的理解,好像是GET方法。但是,没有参数被发送。请随时纠正我,因为我在 android 编程方面完全是文盲。
private class Background_get extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
try {
/* Change the IP to the IP you set in the arduino sketch */
URL url = new URL("http://192.168.43.142/?" + params[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(10000);
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder result = new StringBuilder();
String inputLine;
while ((inputLine = in.readLine()) != null)
result.append(inputLine).append("\n");
in.close();
connection.disconnect();
return result.toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
这个接收方是一个arduino
,它处理发送数据的方式是通过检查和比较最后一个字符。如需进一步说明,请参阅以下几行:
char c = client.read();
Serial.write(c);
buffered +=c;
if(buffered.endsWith("O")){ // this is for TV
//digitalWrite(pin2,HIGH);
irsend.sendPanasonic(0x4004,0x100BCBD);
delay(100);
} else if (buffered.endsWith("X")) {
irsend.sendPanasonic(0x4004,0x1004C4D);
} else if (buffered.endsWith("P")) {
irsend.sendPanasonic(0x4004,0x1000405);
} else if (buffered.endsWith("M")) {
irsend.sendPanasonic(0x4004,0x1008485);
} else if (buffered.endsWith("1"))
我目前在这里所做的是首先为 HTTP 通信设置 info.plist,如下所示:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSExceptionDomains</key>
<dict>
<key>192.168.43.142</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
在这里我定义了我的 IP 地址:
enum API : String {
case url = "http://192.168.43.142/?"
}
我按以下方式使用它:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
var httpRequest = API.url.rawValue
let clicked_btn = indexPath.row
switch clicked_btn {
case 0 :
httpRequest = "\(httpRequest)CP"
case 1 :
httpRequest = "\(httpRequest)1"
case 2 :
httpRequest = "\(httpRequest)2"
case 3 :
httpRequest = "\(httpRequest)3"
case 4 :
httpRequest = "\(httpRequest)CM"
case 5:
httpRequest = "\(httpRequest)4"
case 6 :
httpRequest = "\(httpRequest)5"
case 7 :
httpRequest = "\(httpRequest)6"
case 8 :
httpRequest = "\(httpRequest)P"
case 9 :
httpRequest = "\(httpRequest)7"
case 10 :
httpRequest = "\(httpRequest)8"
case 11:
httpRequest = "\(httpRequest)9"
case 12 :
httpRequest = "\(httpRequest)M"
case 13 :
httpRequest = "\(httpRequest)X"
case 14 :
httpRequest = "\(httpRequest)0"
case 15 :
httpRequest = "\(httpRequest)O"
default :
print("deaf")
break
}
//send the HTTP Request :
print( "my http request is ====> \(httpRequest)")
let url = URL(string: "\(httpRequest)")!
let request = URLRequest(url: url)
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
//do stuff with data, response, error
print("Response : \(response)")
}
task.resume()
}
这里的问题是我在 console.I 中不断收到以下错误,不知道我哪里出错了。我已经检查了大多数其他类似的问题,但找不到任何答案。
my http request is ====> http://192.168.43.142/?O
2018-03-02 19:06:43.749016+0800 Master_Project[1687:584006] Task <8BCA1C8B-6571-491D-85D7-97BE6633E720>.<1> finished with error - code: -1001
2018-03-02 19:06:43.766883+0800 Master_Project[1687:584006] Task <8BCA1C8B-6571-491D-85D7-97BE6633E720>.<1> HTTP load failed (error code: -999 [1:89])
Response : nil
非常感谢您的帮助。值得一提的是,我在模拟器和真实设备上都试过了,它们最终都给了我同样的错误
错误代码-1001表示您的连接超时。看起来您的设置无法连接到服务器。出于测试目的,您可以使 NSAppTransportSecurity
设置更简单,只需将 NSAllowsArbitraryLoads
设置为 true
;如果连接以这种方式工作,您就知道它与配置有关。
Here 是一些 network-related 错误代码的列表。
我得到了以下代码行,旨在向 Java 中的 IP 发送一个值。按照我的理解,好像是GET方法。但是,没有参数被发送。请随时纠正我,因为我在 android 编程方面完全是文盲。
private class Background_get extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
try {
/* Change the IP to the IP you set in the arduino sketch */
URL url = new URL("http://192.168.43.142/?" + params[0]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(10000);
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder result = new StringBuilder();
String inputLine;
while ((inputLine = in.readLine()) != null)
result.append(inputLine).append("\n");
in.close();
connection.disconnect();
return result.toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
这个接收方是一个arduino
,它处理发送数据的方式是通过检查和比较最后一个字符。如需进一步说明,请参阅以下几行:
char c = client.read();
Serial.write(c);
buffered +=c;
if(buffered.endsWith("O")){ // this is for TV
//digitalWrite(pin2,HIGH);
irsend.sendPanasonic(0x4004,0x100BCBD);
delay(100);
} else if (buffered.endsWith("X")) {
irsend.sendPanasonic(0x4004,0x1004C4D);
} else if (buffered.endsWith("P")) {
irsend.sendPanasonic(0x4004,0x1000405);
} else if (buffered.endsWith("M")) {
irsend.sendPanasonic(0x4004,0x1008485);
} else if (buffered.endsWith("1"))
我目前在这里所做的是首先为 HTTP 通信设置 info.plist,如下所示:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSExceptionDomains</key>
<dict>
<key>192.168.43.142</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
</dict>
</dict>
</dict>
在这里我定义了我的 IP 地址:
enum API : String {
case url = "http://192.168.43.142/?"
}
我按以下方式使用它:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
var httpRequest = API.url.rawValue
let clicked_btn = indexPath.row
switch clicked_btn {
case 0 :
httpRequest = "\(httpRequest)CP"
case 1 :
httpRequest = "\(httpRequest)1"
case 2 :
httpRequest = "\(httpRequest)2"
case 3 :
httpRequest = "\(httpRequest)3"
case 4 :
httpRequest = "\(httpRequest)CM"
case 5:
httpRequest = "\(httpRequest)4"
case 6 :
httpRequest = "\(httpRequest)5"
case 7 :
httpRequest = "\(httpRequest)6"
case 8 :
httpRequest = "\(httpRequest)P"
case 9 :
httpRequest = "\(httpRequest)7"
case 10 :
httpRequest = "\(httpRequest)8"
case 11:
httpRequest = "\(httpRequest)9"
case 12 :
httpRequest = "\(httpRequest)M"
case 13 :
httpRequest = "\(httpRequest)X"
case 14 :
httpRequest = "\(httpRequest)0"
case 15 :
httpRequest = "\(httpRequest)O"
default :
print("deaf")
break
}
//send the HTTP Request :
print( "my http request is ====> \(httpRequest)")
let url = URL(string: "\(httpRequest)")!
let request = URLRequest(url: url)
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
//do stuff with data, response, error
print("Response : \(response)")
}
task.resume()
}
这里的问题是我在 console.I 中不断收到以下错误,不知道我哪里出错了。我已经检查了大多数其他类似的问题,但找不到任何答案。
my http request is ====> http://192.168.43.142/?O
2018-03-02 19:06:43.749016+0800 Master_Project[1687:584006] Task <8BCA1C8B-6571-491D-85D7-97BE6633E720>.<1> finished with error - code: -1001
2018-03-02 19:06:43.766883+0800 Master_Project[1687:584006] Task <8BCA1C8B-6571-491D-85D7-97BE6633E720>.<1> HTTP load failed (error code: -999 [1:89])
Response : nil
非常感谢您的帮助。值得一提的是,我在模拟器和真实设备上都试过了,它们最终都给了我同样的错误
错误代码-1001表示您的连接超时。看起来您的设置无法连接到服务器。出于测试目的,您可以使 NSAppTransportSecurity
设置更简单,只需将 NSAllowsArbitraryLoads
设置为 true
;如果连接以这种方式工作,您就知道它与配置有关。
Here 是一些 network-related 错误代码的列表。