私はこのリンクを使用しようとしていますhttps://congress.api.sunlightfoundation.com/bills/search?query=Taylor強制的に法案を照会してください。Swift Request Not Working
私のiOSアプリケーションでは、Webブラウザで同じURLを入力した場合の結果を得るためにpostStringパラメータ( "query =" TaylorForcedAct ")を使用しようとしています。残念ながら、私は403エラーを取得:
status code: 403, headers { "Content-Length" = 551; "Content-Type" = "text"
私はブラウザで行う場合には、それが正常にデータを返しますが
私はなぜ、唯一のアドレスバーに、迅速使用して要求することにより、それをアクセスすることはできませんか。? ]
編集:すべてのエラーを申し訳ありません、私はこれを本当に深夜に書いています
Optional(<NSHTTPURLResponse: 0x608000038040> { URL: https://congress.api.sunlightfoundation.com/bills/search? } { status code: 403, headers {
"Content-Length" = 551;
"Content-Type" = "text/html";
Date = "Sat, 10 Jun 2017 16:57:23 GMT";
Server = CloudFront;
Via = "1.1 b4b2849aaf2c14969531f9514611da28.cloudfront.net (CloudFront)";
"x-amz-cf-id" = "vH379ZK57HN6pqgCQsdWD7x_jv5_xTzB5uMX3krdoSRR92pKFKWeag==";
"x-cache" = "Error from cloudfront";
} })
Requestttt = Optional(https://congress.api.sunlightfoundation.com/bills/search?)
responseString = <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>ERROR: The request could not be satisfied</TITLE>
</HEAD><BODY>
<H1>ERROR</H1>
<H2>The request could not be satisfied.</H2>
<HR noshade size="1px">
Bad request.
<BR clear="all">
<HR noshade size="1px">
<PRE>
Generated by cloudfront (CloudFront)
Request ID: vH379ZK57HN6pqgCQsdWD7x_jv5_xTzB5uMX3krdoSRR92pKFKWeag==
</PRE>
<ADDRESS>
</ADDRESS>
</BODY></HTML>
と同じパラメータとURLを使ってブラウザの応答(https://congress.api.sunlightfoundation.com/bills/search?query=TaylorForceAct):
{"results":[],"count":0,"page":{"count":0,"per_page":20,"page":1}}
ソリューション:ここSWIFTコードは
func authentication3() {
let request = NSMutableURLRequest(url: URL(string: "https://congress.api.sunlightfoundation.com/bills/search?")!)
request.httpMethod = "GET"
request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Accept")
//let poststring = "query= TaylorForceAct"
request.httpBody = "query=TaylorForceAct".data(using: String.Encoding.utf8)
//request.addValue("\"Taylor Force Act\"", forHTTPHeaderField: "query")
let task = URLSession.shared.dataTask(with: request as URLRequest) {
data, response, error in
if error != nil {
print("error=\(String(describing: error?.localizedDescription))")
return
}
print("response = \(String(describing: response))")
print("Requestttt = \(String(describing: request.url?.absoluteURL))")
let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
print("responseString = \(responseString ?? "L")")
}
task.resume()
}
と応答である私が馬鹿でしたGETを使って投稿しようとすると...正しい解決策は、選択された答えは次のとおりです。URLcomponetsを使用してURLを解析します。
これまでに試したコードを表示すると、私たちがあなたを助けやすくなります。 –
'GET'リクエストで' httpBody'を使うことはできません。 URLに '?query = ...'を追加する必要があります。 'Content-Type'も設定しないでください。 'GET'リクエストには内容がありません。 – Sulthan
これを 'POST'として送信すると、応答に403ステータスコードが返されます。私はあなたのコンテンツの長さが551であったことに驚いています。このレスポンスでボディーが何であったかを見ると面白いでしょう(例えば、 'String(data:data!、encoding:utf8) ') – Rob