pho.to API 请求失败 Swift
pho.to API Request Failing in Swift
我目前正在尝试在我的 iOS 应用程序中使用 pho.to API。我正在尝试根据文档提出简单的请求,但我似乎无法成功完成请求。在我的 API 客户端文件中,我有以下代码:
let dataStr = """
<image_process_call>
<image_url>http://developers.pho.to/img/girl.jpg</image_url>
<methods_list>
<method order="1">
<name>desaturation</name>
</method>
<method order="2">
<name>caricature</name>
<params>type=1;crop_portrait=true</params>
</method>
</methods_list>
<thumb1_size>100</thumb1_size>
</image_process_call>
"""
let encodedStr = dataStr.replacingOccurrences(of: "\n", with: "").replacingOccurrences(of: " ", with: "")
let signData = encodedStr.hmac(key: key)
let urlStr = "https://opeapi.ws.pho.to/addtask/?app_id=\(appId)&key=\(key)&sign_data=\(signData)&data=\(encodedStr.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!))"
正在根据 this Stack Overflow post 进行 HMAC 编码。不幸的是,当使用 URLSession 向 URL 发出请求时,我得到了这样的回复:
<?xml version=\"1.0\"?>\n<image_process_response><status>SecurityError</status><err_code>614</err_code><description>Error in POST parameters: one or more parameters (DATA , SIGN_DATA or APP_ID) are empty</description></image_process_response>
我觉得我的问题更多地与实际形成请求有关,而不是特定于 API 本身的问题。我知道我的代码有点乱,但是我希望有人能在提出这样的请求方面为我指明正确的方向。谢谢!
根据他们的文档,您可以看到从 POST 请求发送过来的数据在正文中(在 cURL 调用中 -d 指定请求的正文)
您在查询中发送 params/data,pho.to API 不接受,因此出现错误。
以下是您可以如何操作的示例:
let defaultSessionConfiguration = URLSessionConfiguration.default
let defaultSession = URLSession(configuration: defaultSessionConfiguration)
// Setup the request with URL
let url = URL(string: "https://opeapi.ws.pho.to/addtask")!
var urlRequest = URLRequest(url: url)
// Convert POST string parameters to data using UTF8 Encoding
let postData = yourXMLString.data(using: .utf8)
// Set the httpMethod and assign httpBody
urlRequest.httpMethod = "POST"
urlRequest.httpBody = postData
// Create dataTask
let dataTask = defaultSession.dataTask(with: urlRequest) { (data, response, error) in
// Handle your response here
}
// Fire the request
dataTask.resume()
我目前正在尝试在我的 iOS 应用程序中使用 pho.to API。我正在尝试根据文档提出简单的请求,但我似乎无法成功完成请求。在我的 API 客户端文件中,我有以下代码:
let dataStr = """
<image_process_call>
<image_url>http://developers.pho.to/img/girl.jpg</image_url>
<methods_list>
<method order="1">
<name>desaturation</name>
</method>
<method order="2">
<name>caricature</name>
<params>type=1;crop_portrait=true</params>
</method>
</methods_list>
<thumb1_size>100</thumb1_size>
</image_process_call>
"""
let encodedStr = dataStr.replacingOccurrences(of: "\n", with: "").replacingOccurrences(of: " ", with: "")
let signData = encodedStr.hmac(key: key)
let urlStr = "https://opeapi.ws.pho.to/addtask/?app_id=\(appId)&key=\(key)&sign_data=\(signData)&data=\(encodedStr.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!))"
正在根据 this Stack Overflow post 进行 HMAC 编码。不幸的是,当使用 URLSession 向 URL 发出请求时,我得到了这样的回复:
<?xml version=\"1.0\"?>\n<image_process_response><status>SecurityError</status><err_code>614</err_code><description>Error in POST parameters: one or more parameters (DATA , SIGN_DATA or APP_ID) are empty</description></image_process_response>
我觉得我的问题更多地与实际形成请求有关,而不是特定于 API 本身的问题。我知道我的代码有点乱,但是我希望有人能在提出这样的请求方面为我指明正确的方向。谢谢!
根据他们的文档,您可以看到从 POST 请求发送过来的数据在正文中(在 cURL 调用中 -d 指定请求的正文)
您在查询中发送 params/data,pho.to API 不接受,因此出现错误。
以下是您可以如何操作的示例:
let defaultSessionConfiguration = URLSessionConfiguration.default
let defaultSession = URLSession(configuration: defaultSessionConfiguration)
// Setup the request with URL
let url = URL(string: "https://opeapi.ws.pho.to/addtask")!
var urlRequest = URLRequest(url: url)
// Convert POST string parameters to data using UTF8 Encoding
let postData = yourXMLString.data(using: .utf8)
// Set the httpMethod and assign httpBody
urlRequest.httpMethod = "POST"
urlRequest.httpBody = postData
// Create dataTask
let dataTask = defaultSession.dataTask(with: urlRequest) { (data, response, error) in
// Handle your response here
}
// Fire the request
dataTask.resume()