Language/HTML

cURL 을 사용하여 web browser와 동일한 결과 얻기

TechNote.kr 2015. 12. 22. 11:26
728x90

web server에서 data를 가져오는 coding을 하다보면

web browser를 통해 data를 가져오는 결과와 

library 혹은 command를 통해 가져오는 결과가 달라서 난감할 때가 있다.


추측해 보건데 header에 달린 element들의 값이 다르거나 없어서 

web server에서 이를 인지하고 response를 주지 않기 때문으로 생각된다.


그렇다면 이런 문제가 발생할 때 마다 web browser에서 전달하는 html request 를 잡아서 내용을 분석하고

command 혹은 library에서 최대한 비슷하게 header등을 구현해서 보내야 하는 것인가...


cURL 이나 library 사용에 있어서 경험이 많고, html header에 대해 깊은 이해가 있다면 

별로 큰일이 아닐 수도 있겠지만 어떤 option을 cURL에 넣어야 하는지 어떤 argument를 library로 넘겨줘야 하는지

감조차 오지 않는 상황에서 막막하기만 하다.


그렇다면 좀 더 쉬운 방법으로 알수 있는 방법이 없을까?


이것 저것 찾아보다 chrome에 좋은 기능이 있는 것을 확인하였다. 


가장 흔하게 사용되는 chrome과 cURL을 기반으로 예를 들어 설명해보면 다음과 같다.


예제 주소 : http://m.krx.co.kr/stats/contents/204


[Chrome]



[cURL]


$ curl -vv http://m.krx.co.kr/stats/contents/204

* Hostname was NOT found in DNS cache

*   Trying 115.22.33.34...

* Connected to m.krx.co.kr (115.22.33.34) port 80 (#0)

> GET /stats/contents/204 HTTP/1.1

> User-Agent: curl/7.35.0

> Host: m.krx.co.kr

> Accept: */*

>

< HTTP/1.1 404 Not Found

< Date: Tue, 22 Dec 2015 02:10:49 GMT

< Set-Cookie: JSESSIONID=EB79013270DF32B49B74CAF117B8FB94.node_was106_8409; Path=/stats/; HttpOnly

< Content-Type: text/html;charset=utf-8

< Transfer-Encoding: chunked

< Connection: close

<

* Closing connection 0


Chrome에서는 주소입력으로 정상적으로 page가 보여지는 반면

curl에서는 404 Not Found 가 response로 전달되었다.


대체 curl에 어떤 옵션을 붙여야 web browser에서 보여주는 html data를 받아올 수 있는 것인가.


Chrome > 원하는 site 접속 > F12 (developer tools) > Network


해당 site를 loading 하면서 받아온 resource의 리스트들이 하단에 나타나게 되는데 

이중 원하는 resource 의 popup menu를 보면 

Copy as cURL (cmd), Copy as cURL (bash) 두 항목을 선택할 수가 있다.


Copy as cURL (cmd)

curl "http://m.krx.co.kr/stats/contents/204" -H "Accept-Encoding: gzip, deflate, sdch" -H "Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4" -H "Upgrade-Insecure-Requests: 1" -H "User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36" -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" -H "Referer: http://m.krx.co.kr/stats/contents/201" -H "Cookie: JSESSIONID=2E4CC930CAC2EDC6C3D7EBDF55F0448B.node_was106_8409; JSESSIONID=B644C648AA63537B41DAAF5993C5BB75.node_was106_8409; __utma=243913561.304474195.1450747816.1450747816.1450747816.1; __utmc=243913561; __utmz=243913561.1450747816.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)" -H "Connection: keep-alive" -H "Cache-Control: max-age=0" --compressed 


Copy as cURL (bash)

curl 'http://m.krx.co.kr/stats/contents/204' -H 'Accept-Encoding: gzip, deflate, sdch' -H 'Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Referer: http://m.krx.co.kr/stats/contents/201' -H 'Cookie: JSESSIONID=2E4CC930CAC2EDC6C3D7EBDF55F0448B.node_was106_8409; JSESSIONID=B644C648AA63537B41DAAF5993C5BB75.node_was106_8409; __utma=243913561.304474195.1450747816.1450747816.1450747816.1; __utmc=243913561; __utmz=243913561.1450747816.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)' -H 'Connection: keep-alive' -H 'Cache-Control: max-age=0' --compressed 


두 항목에 어떤 차이점이 있는지 비교해 보면 "와 '의 차이점이라서 해당 사이트에 대해서는 차이점이 없었다.


실행해보면 browser와 동일한 html data를 받아온다.



728x90

'Language > HTML' 카테고리의 다른 글

Webfont 의 적용 (Google Fonts)  (0) 2018.10.11
[HTML/CSS] <link href> 그리고 <script src>  (0) 2016.08.09
Kendo UI, 더 심플한 웹페이지 위한 Framework  (1) 2016.04.06
Links (a tag, link tag)  (0) 2015.11.16
div와 span의 차이  (0) 2015.11.08
meta tag  (0) 2015.10.15
DOCTYPE  (0) 2015.10.14