Qiita의 API를 부를 때 끝에 슬래시를 붙이면 http://~로 리디렉션되므로 조심합시다.

TL;DR



제목대로. curl 결과는 여기 .

iOS 향수 오류



예전에 보았던 오류에 근거한 박자를 만났습니다
App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

이것은 메시지처럼 HTTP 통신을 시도할 때 iOS가 차단하는 사람입니다.

Qiita의 API를 호출하려고했습니다.


URLSession 에 건네주고 있는 url는 확실히 https의 것……
let url = URL(string: "https://qiita.com/api/v2/items/?per_page=3")!
let task = urlSession.dataTask(with: url) { data, response, error in
    ...

오류 메시지를 확인해 봅니다.


- Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection." UserInfo={NSUnderlyingError=0x6000007b4b40 {Error Domain=kCFErrorDomainCFNetwork Code=-1022 "(null)"}, NSErrorFailingURLStringKey=http://qiita.com/api/v2/items, NSErrorFailingURLKey=http://qiita.com/api/v2/items, NSLocalizedDescription=The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.}

? !
NSErrorFailingURLKey=http://qiita.com/api/v2/items?per_page=3

왜 그런지 모르겠지만 URL 체계가 http로 바뀌 었습니까? ? ?

그리고 로컬 호스트에 연결할 때와 마찬가지로 App Transport Security Settings의 Allow Arbitrary Loads를 YES로 설정하면 문제없이 결과가 반환되었습니다.

범인은…



한 시간 동안 빠진 뒤 마침내 범인이 발견되었습니다. 1
let url = URL(string: "https://qiita.com/api/v2/items/?per_page=3")!

잘 보면, URL의 말미에 슬래시가 붙어 있다…

그래? 하지만 이 URL을 curl로 두드려도 평소에 응답이 돌아온 것 같은?

다시 curl로 두드려 보았다.


$ curl -D - https://qiita.com/api/v2/items/ 
HTTP/2 301 
date: Tue, 15 Sep 2020 12:45:32 GMT
content-type: text/html
content-length: 178
location: http://qiita.com/api/v2/items
server: nginx

<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>

? !

왜 http로 리디렉션되었습니다 2

Qiita API를 사용할 때는 후행 슬래시에주의하십시오.



결론이었습니다
let url = URL(string: "https://qiita.com/api/v2/items?per_page=3")!

만일 같은 현상에 조우한 사람이 있으면, 여기에 도착할 수 있도록.



릴리스 전의 개발에서는 지금도 잘 볼지도 모르겠네요. 3

당초는 macOS의 프로젝트에서 시험하고 있었기 때문에, 평소 만지지 않는 샌드 박스의 설정 등을 의심하고 있었기 때문에, 어색해 버렸습니다.

그러고 보면 조사의 도중에 curl 사용할 때에는 무의식적으로 -L옵션을 붙이고 있던 것 같은……

좋은 웹페이지 즐겨찾기