我在这里遇到了一个奇怪的问题。
这是我第一次创建数据库,编写PHP并从ios app(目标c)中提取输出。我在swift中遵循了一个教程,然后我成功地翻译了代码。
我创建了一个包含2列的示例数据表,使用PHP脚本查询它们并将其放在我的webroot目录中。路径为http://haiticonnect.epizy.com/GetVotes.php
,当我将其粘贴到chrome中时,该页面会显示我的记录。
检查页面的源代码也可以提供这种精确的输出。
[{"id":"firstid","post_id":"1"},{"id":"secondid","post_id":"2"}]
我的问题在于我的客观c代码,当我尝试使用[NSData dataWithContentsOfUrl:myUrl]获取数据时,它总是到达一个页面,表明浏览器不支持javascript。所以从mac,我在safari中禁用javascript,粘贴网址,但它显示正确的页面。
有人可以解释为什么dataWithContentsOfUrl
会看到javascript吗?
#define JSON_URL @"http://haiticonnect.epizy.com/GetVotes.php"
NSURL *blogURL = [NSURL URLWithString:JSON_URL];
NSData *jsonData = [NSData dataWithContentsOfURL:blogURL];
const unsigned char *ptr = [jsonData bytes];
for(int i=0; i<[jsonData length]; ++i) {
unsigned char c = *ptr++;
NSLog(@"char=%c hex=%x", c, c);
}
我使用此算法打印它找到的每个字符,但它只是一个字符串,表示我的浏览器不支持javascript。
答案 0 :(得分:1)
您的网页存在2个问题。
尝试清除此网站的所有Cookie,然后禁用javascript,然后重试。你会发现它不起作用。您需要做的是找出javascript如何生成或请求cookie,然后自己生成或请求cookie,然后使用有效的用户代理和cookie发出请求。
获得cookie和有效的用户代理后,您可以尝试使用它:
夫特:
let requestURL = URL(string: "http://haiticonnect.epizy.com/GetVotes.php")!
var request = URLRequest(url: requestURL)
request.setValue("valid-user-agent", forHTTPHeaderField: "User-Agent")
request.setValue("cookieName=cookieValue", forHTTPHeaderField: "Cookie")
let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in
guard let data = data else {
print("Request failed")
return
}
// Handle JSON data here
let jsonString = String(data: data, encoding: .utf8)
print(jsonString)
}
task.resume()
目标-C:
NSURL *requestURL = [NSURL URLWithString:@"http://haiticonnect.epizy.com/GetVotes.php"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:requestURL];
[request setValue:@"valid-user-agent" forHTTPHeaderField:@"User-Agent"];
[request setValue:@"cookieName=cookieValue" forHTTPHeaderField:@"Cookie"];
NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (data == nil) {
NSLog(@"Request failed");
return;
}
// Handle JSON data here
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@", jsonString);
}];
[task resume];