gpt4 book ai didi

swift - NSMutableURLRequest.HTTPMethod 未设置正确的方法

转载 作者:行者123 更新时间:2023-11-30 13:47:47 31 4
gpt4 key购买 nike

我有一个 API 请求,它应该 POST 一些 json:

class func makeAPICall (serializedJSONObject contentMap: Dictionary<String, String>, completion: ((data: NSData?, response: NSURLResponse?, error: NSError?) -> Void)) throws -> Void {
var jsonData: NSData
do {
jsonData = try NSJSONSerialization.dataWithJSONObject(contentMap, options: NSJSONWritingOptions())
var jsonString = NSString(data: jsonData, encoding: NSUTF8StringEncoding) as! String
print(jsonString)
jsonString = jsonString.stringByAddingPercentEncodingForFormUrlencoded()!
print(jsonString)
jsonData = jsonString.dataUsingEncoding(NSUTF8StringEncoding)!
let postsEndpoint: String = "https://www.example.com/api/v2"
guard let postsURL = NSURL(string: postsEndpoint) else {
throw APICallError.other("cannot create URL")
}
let postsURLRequest = NSMutableURLRequest(URL: postsURL)
print(jsonData)
postsURLRequest.HTTPBody = jsonData
print(postsURLRequest)
postsURLRequest.HTTPMethod = "POST"

let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config)

let task = session.dataTaskWithRequest(postsURLRequest, completionHandler: {
(data, response, error) in
completion(data: data, response: response, error: error)
})
task.resume() //starts the request. It's called resume() because a session starts in a suspended state
} catch {
print("lol, problem")
}
}

带有扩展名(用于x-www-form-urlencoded编码):

extension String {
func stringByAddingPercentEncodingForFormUrlencoded() -> String? {
let characterSet = NSMutableCharacterSet.alphanumericCharacterSet()
characterSet.addCharactersInString("-._* ")

return stringByAddingPercentEncodingWithAllowedCharacters(characterSet)?.stringByReplacingOccurrencesOfString(" ", withString: "+")
}
}

现在我也有这个简单的测试页面来测试 json 请求:

<form action="v2/" method="post">
<textarea name="data" rows="20" cols="80"></textarea>
<input type="submit" />
</form>

服务器记录所有请求,这样我就发现我的应用实际上使用的是 GET 而不是 POST

应用程序请求日志:

GET /api/v2/ HTTP/1.1

HTTP headers:
Host: www.example.com
Accept: */\*
Cookie: PHPSESSID=vd61qutdll216hbs3a677fgsq4
User-Agent: KM%20registratie%20tabbed%20NL/1 CFNetwork/758.2.8 Darwin/15.2.0
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: keep-alive

Request body:

(请注意,请求正文也是空的,但我会为此提出一个不同的问题)

html表单请求日志:

POST /api/v2/ HTTP/1.1

HTTP headers:
Host: www.example.com
Origin: http://www.example.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/\*;q=0.8
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9
Referer: http://www.example.com/api/test.php
Accept-Language: en-us
Accept-Encoding: gzip, deflate

Request body:
data=%7B%22action%22%3A+%22vehicleRecords%22%2C%0D%0A%22token%22%3A+%22token_04e01fdc78205f0f6542bd523519e12fd3329ba9%22%2C%0D%0A%22vehicle%22%3A+%22vehicle_e5b79b2e%22%7D

最佳答案

你能先尝试一下吗?

if let postEndpoint: NSURL = NSURL(string: "https://www.example.com/api/v2") {
let postURLRequest: NSMutableURLRequest = NSMutableURLRequest(URL: postEndpoint)
postURLRequest.HTTPMethod = "POST"
postURLRequest.HTTPBody = UTF8EncodedJSON

NSURLSession.sharedSession().dataTaskWithRequest(postURLRequest, completionHandler: { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in

}).resume()
}

关于swift - NSMutableURLRequest.HTTPMethod 未设置正确的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34707791/

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