我一直在尝试通过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()
答案 0 :(得分:0)
一些观察结果:
您共享使用$_POST
的PHP。这意味着它期待x-www-form-urlencoded
请求。因此,在Swift中,您应该将请求的Content-Type
设置为application/x-www-form-urlencoded
,因为这就是您要发送的内容。同样,在Swift中,请求的Accept
应为application/json
,因为您的代码将“接受”(或期望)JSON响应。
您提供的values
字符串中有一个空格。您在x-www-form-urlencoded
请求中发送的键值对中不能有空格。 (注意,如果您的values
密钥对中有任何非字母数字字符,则应对其进行百分比编码。)
在您的Swift错误处理程序中,除了打印error
之外,您可能还想尝试将data
转换为String
,并查看它的内容,例如
if let string = String(data: data!, encoding: .utf8) {
print(string)
}
您可能还想查看response
并查看其报告的statusCode
。完成后,您随后告诉我们它报告了statusCode
500。
状态代码500表示Web服务中存在一些内部错误。 (如果成功,则代码为200.)这通常是由于请求未正确处理而出现一些错误的结果。例如,如果请求忽略了正确格式化请求并且Web服务没有预期/捕获它,或者Web服务器上存在其他内部错误,则可能会获得500错误代码。有关状态代码列表,请参阅http://w3.org/Protocols/rfc2616/rfc2616-sec10.html。
如果您的网络服务的回复正文中的文字没有启发,您可能需要启用错误报告(请参阅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
?>