PHP CURL - 함수 및 사용 예. Curl_setopt - 명령줄에서 컬을 사용하여 CURL 세션에 대한 옵션을 설정합니다.




CURL은 명령줄 유틸리티와 URL 구문을 사용하여 데이터를 전송하기 위한 라이브러리로 구성된 소프트웨어 패키지입니다.

CURL은 DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet 및 TFTP를 포함한 다양한 프로토콜을 지원합니다.

별도의 파일 업로드
다음 명령은 URL의 내용을 가져와 표준 출력(예: 터미널)에 표시합니다.

Curl https://mi-al.ru/ > mi-al.htm % 총 % 수신 % Xferd 평균 속도 시간 시간 시간 현재 Dload 업로드 총 소비 왼쪽 속도 100 14378 0 14378 0 0 5387 0 --: --:- - 0:00:02 --:--:-- 5387

cURL 출력을 파일로 저장
-o/-O 옵션을 사용하여 컬 명령의 결과를 파일에 저장할 수 있습니다.
  • -영형(o 소문자) 결과는 명령줄에 지정된 파일에 저장됩니다.
  • -영형(대문자 O) 파일 이름은 URL에서 가져오고 수신된 데이터를 저장하는 데 사용됩니다.

$ 컬 -o mygettext.html http://www.gnu.org/software/gettext/manual/gettext.html

이제 gettext.html 페이지가 'mygettext.html'이라는 파일에 저장됩니다. -o 옵션과 함께 컬을 실행하면 다음과 같이 다운로드 진행률 표시줄이 표시됩니다.

% 총 % 수신 % Xferd 평균 속도 시간 시간 시간 현재 Dload 업로드 총 소비 왼쪽 속도 66 1215k 66 805k 0 0 33060 0 0:00:37 0:00:24 0:00:13 45900 100 1215k 100 1215k 0 0 39474 0 0:00:31 0:00:31 --:--:-- 68987

컬 -O(대문자 O)를 사용하면 자체적으로 로컬 시스템의 'gettext.html'이라는 파일에 콘텐츠가 저장됩니다.

$ 컬 -O http://www.gnu.org/software/gettext/manual/gettext.html

참고: 컬이 터미널에 데이터를 써야 할 때 인쇄된 데이터와의 혼동을 피하기 위해 진행률 표시줄을 비활성화합니다. '>'|'-o'|'-O' 옵션을 사용하여 결과를 파일로 전송할 수 있습니다.

한 번에 여러 파일 검색
명령줄에 모든 URL을 지정하여 한 번에 여러 파일을 다운로드할 수 있습니다.

컬 -O URL1 -O URL2

아래 명령은 index.html과 gettext.html을 모두 다운로드하여 현재 디렉터리에 동일한 이름으로 저장합니다.

컬 -O http://www.gnu.org/software/gettext/manual/html_node/index.html -O http://www.gnu.org/software/gettext/manual/gettext.html

위에 표시된 것과 같이 동일한 서버에서 여러 파일을 다운로드하면 컬이 연결을 재사용하려고 시도합니다.

-L 옵션을 사용하여 HTTP 위치 헤더를 따릅니다.
기본적으로 CURL은 헤더(리디렉션)에서 HTTP 위치를 따르지 않습니다. 요청한 웹 페이지가 다른 위치로 이동하면 해당 응답이 HTTP 위치 헤더에 전송됩니다.
예를 들어 누군가 자신의 국가에서 브라우저에 google.com을 입력하면 자동으로 'google.co.xx'로 리디렉션됩니다. 이는 아래와 같이 HTTP Location 헤더를 기반으로 수행됩니다.

컬 https://www.google.com/?gws_rd=ssl

302 이동됨

302 이동됨

문서가 여기로 옮겨졌습니다.

위의 출력은 요청한 문서가 '로 이동되었음을 나타냅니다.

손님에게 숨겨짐

.
컬이 리디렉션을 따르도록 지시할 수 있습니다. 이는 아래와 같이 -L 옵션을 사용하여 수행됩니다. 이제 html 소스 코드가 다음에서 다운로드됩니다.

손님에게 숨겨짐

.

컬 -L https://www.google.com/?gws_rd=ssl

이전 다운로드 갱신

-C 옵션을 사용하면 어떤 이유로 중단된 다운로드를 계속할 수 있습니다. 이는 대용량 파일 다운로드에 실패할 때 유용합니다.
'-C -'라고 말하면 컬은 다운로드를 재개할 위치를 찾습니다. '-C를 지정할 수도 있습니다.<смещение>'. 지정된 바이트 오프셋은 소스 파일의 시작 부분에서 건너뜁니다.
컬을 사용하여 대용량 다운로드를 시작하고 Ctrl-C를 눌러 다운로드 중에 중지합니다.

$ 컬 -O http://www.gnu.org/software/gettext/manual/gettext.html ############## 20.1%

주입은 20.1%에서 중단되었습니다. "curl -C -"를 사용하면 중단한 부분부터 계속해서 로드할 수 있습니다. 이제 다운로드가 20.1%부터 계속됩니다.

컬 -C - -O http://www.gnu.org/software/gettext/manual/gettext.html ############### 21.1%

데이터 속도 제한
–limit-rate 옵션을 사용하여 데이터 전송 속도를 제한할 수 있습니다. 최대 속도를 인수로 전달할 수 있습니다.

$ 컬 --limit-rate 1000B -O http://www.gnu.org/software/gettext/manual/gettext.html

위 명령은 전송 속도를 1000바이트/초로 제한합니다. 컬은 피크에서 더 빠른 속도를 사용할 수 있습니다. 그러나 평균 속도는 약 1000바이트/초입니다.
아래는 위 명령의 진행률 표시줄입니다. 현재 속도가 약 1000바이트임을 알 수 있습니다.

% 총 % 수신 % Xferd 평균 속도 시간 시간 시간 현재 Dload 업로드 총 소비 왼쪽 속도 1 1215k 1 13601 0 0 957 0 0:21:40 0:00:14 0:21:26 999 1 1215k 1 14601 0 0 960 0 0:21:36 0:00:15 0:21:21 999 1 1215k 1 15601 0 0 962 0 0:21:34 0:00:16 0:21:18 999

지정된 시간 이전/이후에 변경된 경우에만 파일을 로드합니다.
컬에서 -z 옵션을 사용하면 일정 시간 이후에 변경된 파일을 가져올 수 있습니다. 이는 FTP와 HTTP 모두에서 작동합니다.

위 명령은 지정된 날짜 및 시간보다 최근에 수정된 경우에만 yy.html을 로드합니다.

위의 명령은 지정된 날짜 및 시간 이전에 수정된 경우 file.html을 로드합니다. 날짜 표현식에 지원되는 다양한 구문에 대해 자세히 알아보려면 'man cur_getdate'를 입력하세요.

cURL에서 HTTP 인증 전달
웹사이트에서 콘텐츠를 보려면 사용자 이름과 비밀번호를 요구하는 경우가 있습니다. -u 옵션을 사용하면 아래와 같이 이러한 자격 증명을 cURL에서 웹 서버로 전달할 수 있습니다.

$ 컬 -u 사용자 이름:비밀번호 URL

참고: 기본적으로 컬은 HTTP 기본 인증을 사용합니다. –ntlm |을 사용하여 다른 인증 방법을 설정할 수 있습니다. -요람.


cURL을 사용하여 FTP 서버에서 파일을 다운로드할 수도 있습니다. 지정된 FTP 경로가 디렉터리인 경우 기본적으로 디렉터리에 있는 파일 목록이 표시됩니다.

$ 컬 -u ftpuser:ftppass -O ftp://ftp_server/public_html/xss.php

위 명령은 ftp 서버에서 xss.php 파일을 다운로드하여 로컬 디렉터리에 저장합니다.

$ 컬 -u ftpuser:ftppass -O ftp://ftp_server/public_html/

여기서 URL은 디렉토리를 나타냅니다. 따라서 cURL은 지정된 URL의 파일과 디렉터리를 나열합니다.


CURL은 URL에 지정된 범위를 지원합니다. 범위가 지정되면 해당 범위 내의 해당 파일이 로드됩니다. 이는 FTP 미러 사이트에서 패키지를 다운로드할 때 유용합니다.

$ 컬 ftp://ftp.uk.debian.org/debian/pool/main//

위 명령은 터미널의 a-z 범위에 있는 모든 패키지를 나열합니다.

FTP 서버에 파일 업로드
Curl은 -T 옵션을 사용하여 FTP 서버에 업로드하는 데에도 사용할 수 있습니다.

$ 컬 -u ftpuser:ftppass -T myfile.txt ftp://ftp.testserver.com

위 명령은 myfile.txt라는 파일을 FTP 서버에 업로드합니다. 범위를 사용하여 여러 파일을 한 번에 업로드할 수도 있습니다.

$ 컬 -u ftpuser:ftppass -T "(파일1,파일2)" ftp://ftp.testserver.com

선택적으로 “.”을 사용할 수 있습니다. 표준 입력으로부터 수신하여 원격 시스템에 전달합니다.

$ 컬 -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt

위 명령은 표준 입력에서 사용자의 출력을 수신하고 해당 내용을 ftp 서버에 'myfile_1.txt'로 저장합니다.
각 URL에 '-T'를 지정할 수 있으며 각 주소-파일 쌍에 따라 업로드할 항목이 결정됩니다.

향상된 상세 정보 및 추적 옵션으로 더 많은 정보 제공
-v 옵션을 사용하면 무슨 일이 일어나고 있는지 확인할 수 있습니다. -v 옵션은 음성 모드를 활성화하고 세부 정보를 인쇄합니다.

컬 -v https://www.google.co.th/?gws_rd=ssl

위의 명령은 다음을 출력합니다

* URL을 다음으로 재구성했습니다: https://www.google.co.th/?gws_rd=ssl * 호스트 이름을 DNS 캐시에서 찾을 수 없습니다. * 27.123.17.49 시도 중... * www.google.co.th(27.123. 17.49) 포트 80(#0) > GET / HTTP/1.1 > 사용자 에이전트: 컬/7.38.0 > 호스트: www.google.co.th > 수락: */* >< HTTP/1.1 200 OK < Date: Fri, 14 Aug 2015 23:07:20 GMT < Expires: -1 < Cache-Control: private, max-age=0 < Content-Type: text/html; charset=windows-874 < P3P: CP="This is not a P3P policy! See https://support.google.com/accounts/answer/151657?hl=en for more info." * Server gws is not blacklisted < Server: gws < X-XSS-Protection: 1; mode=block < X-Frame-Options: SAMEORIGIN < Set-Cookie: PREF=ID=1111111111111111:FF=0:TM=1439593640:LM=1439593640:V=1:S=FfuoPPpKbyzTdJ6T; expires=Sun, 13-Aug-2017 23:07:20 GMT; path=/; domain=.google.co.th ... ... ...

더 자세한 정보가 필요한 경우 –trace 옵션을 사용할 수 있습니다. –trace 옵션은 지정된 파일에 대해 들어오고 나가는 모든 데이터의 전체 추적 덤프를 활성화합니다.

2006년 2월 16일 제프 펠링

Curl은 웹에 호스팅된 데이터를 관리하는 데 도움이 됩니다. 이 기사에서는 명령줄에서 웹 페이지를 보내고 받는 데 사용할 수 있는 무료 Curl 도구에 대해 설명합니다. Curl을 사용하면 많은 작업을 쉽게 자동화할 수 있습니다.

Curl은 웹에서 데이터를 관리하는 데 도움을 줍니다

이 기사에서는 명령줄에서 웹 페이지를 보내고 받을 수 있는 Curl이라는 무료 도구를 살펴봅니다. Curl을 사용하면 분석을 위해 웹 페이지를 추출하거나 웹에서 보안 패치를 다운로드하는 등 다양한 보안 및 관리 작업을 쉽게 자동화할 수 있습니다.

컬 설치

Curl은 많은 Unix 배포판에 포함되어 있습니다. 바이너리와 소스는 대부분의 다른 운영 체제에서 사용할 수 있습니다. 오픈 소스 PHP 프로그래머라도 Curl을 사용하여 PHP 스크립트에서 직접 웹 콘텐츠에 안전하게 액세스할 수 있습니다.

Curl이 SSL(Secure Sockets Layer) 웹 사이트와 작동하려면 OpenSSL 패키지가 필요합니다. Curl에는 두 가지 버전이 있습니다. 하나는 SSL이 있고 다른 하나는 SSL이 없습니다. SSL은 데이터를 안정적으로 보호하므로 첫 번째 방법을 권장합니다.

SSL 기능이 포함된 Curl을 사용하려면 먼저 OpenSSL 패키지를 다운로드하여 별도로 설치해야 합니다. Windows 바이너리용 OpenSSL은 GnuWin32 SourceForge 프로젝트 사이트( )에서 다운로드할 수 있습니다. 이 사이트에는 Windows로 이식된 다른 유용한 도구가 많이 있습니다.

OpenSSL 패키지를 다운로드하여 설치한 다음 두 DLL 파일을 system32 디렉터리에 복사해야 합니다.

"C:Program FilesGnuWin32 binlibeay32.dll" %windir%system32 복사 "C:Program FilesGnuWin32 binlibssl32.dll" %windir%system32 복사

그런 다음 Curl을 설치할 수 있습니다. Windows용 SSL 호환 Curl 바이너리는 다음에서 찾을 수 있습니다. http://curl.haxx.se/latest.cgi?curl=win32-ssl-sspi. 최신 버전인 컬 7.15.0은 컬.exe 및 설명서가 포함된 win32-ssl-sspi.zip에 있습니다.

Curl을 설치한 후 다음 명령을 입력하여 작동하는지 확인해야 합니다.

컬 http://isc.sans.org/infocon.txt

화면에 색상 단어(예: 녹색)가 나타나면 Curl이 작동하는 것입니다. 이 간단한 예에서 Curl은 SANS Institute의 Internet Storm Center 웹 사이트에서 Infocon 콘텐츠를 검색합니다. 녹색은 인터넷이 정상적으로 작동하고 있으며 심각한 위협이 감지되지 않았음을 의미합니다. 녹색 대신 노란색, 주황색 또는 빨간색이라는 단어가 화면에 나타나면 이 기사를 옆으로 치우고 웹사이트를 방문하십시오. http://isc.sans.org인터넷상의 고위험 상황에 대해 알아봅니다. 오류가 발생하는 경우 Curl이 올바르게 설치되었는지 확인해야 합니다.

기본적으로 Curl은 웹 페이지를 가져온 다음 페이지의 HTML 소스를 콘솔에 출력합니다. 그러나 유틸리티의 기능은 더 넓습니다. Curl에는 오류 검사 기능이 내장되어 있습니다. 예를 들어 다음 명령은

컬 http://noserver여기

오류 Curl: (6) 호스트를 확인할 수 없습니다: noserverhere; 호스트를 찾을 수 없습니다. 웹 페이지의 가용성이나 웹 서버의 응답성을 테스트하기 위해 스크립트에서 오류 코드를 사용할 수 있습니다. 예를 들어, Curl을 사용하여 매일 웹 페이지, 특히 일일 웹 사이트 통계를 검색하는 경우 오류 코드를 찾는 소스 코드로 스크립트를 보강할 수 있습니다. Curl이 오류 코드 Curl: (7) could not connect to 호스트를 발행하면 즉시 경고를 발행하거나 이메일을 보낼 수 있습니다.

암호화된 데이터 추출

Curl의 가장 중요한 장점 중 하나는 SSL 호환성입니다. 요청된 HTTPS 페이지는 네트워크를 통해 암호화되어 전송되며 Curl은 복구된 텍스트를 화면에 표시합니다. Curl은 또한 인증서(인증서의 만료 날짜, 호스트 이름이 인증서의 호스트 이름과 일치하는지 여부, 루트 인증서의 신뢰 수준)를 확인하고 인증서가 올바르지 않으면 경고합니다. -cacert 옵션을 사용하면 특정 인증서 파일을 지정할 수 있습니다. -k 옵션을 사용하면 인증서 검사가 비활성화됩니다. 또 다른 접근 방식은 -insecure 옵션을 사용하는 것입니다.

WWW 뿐만 아니라

Curl의 기능은 단순히 인터넷을 통해 파일을 보내는 것 이상입니다. Curl을 사용하면 FTP 사이트의 디렉터리 목록을 빠르게 나열할 수 있습니다.

컬 ftp://myftpsite

사이트 하위 디렉터리를 보려면 다음 명령을 입력하세요.

컬 ftp://myftpsite/subdir/

인터넷에서 파일을 다운로드하려면 URL에 파일 이름을 지정하기만 하면 됩니다. 다음 예에서는 명령줄에서 readme.txt라는 파일을 직접 로드하여 화면에 표시합니다.

컬 ftp://ftp.microsoft.com/deskapps/games/readme.txt

FTP 명령을 대화식으로 사용하는 것보다 FTP 파일을 입력하기 위해 Curl 스크립트를 준비하는 것이 더 쉬운 경우가 많습니다.

기본적으로 데이터는 콘솔에 직접 출력되지만 -o 및 -O 옵션을 사용하여 파일로 리디렉션할 수 있습니다. 페이지를 가져와서 디스크에 저장하려면 -o 옵션을 지정해야 합니다. -O 옵션은 결과 페이지를 로컬 파일에 저장하고 Curl은 원격 문서의 이름을 검색합니다. URL에 파일 이름이 포함되어 있지 않으면 이 작업이 실패합니다. Curl을 사용하여 파일 이름 없이 웹 사이트에 요청을 보내고 결과를 파일에 저장하려는 경우 명령줄에서 파일 이름을 지정할 수 있습니다. 예:

입증

Curl은 기본, 다이제스트 및 통합 인증 방법을 제공합니다. 대부분의 사이트에서는 아래에 설명된 것처럼 Curl의 제출 기능을 사용하여 양식 기반 인증 페이지에 액세스할 수 있습니다. 이는 사용자 이름 및 비밀번호와 같은 양식 데이터를 웹 페이지에 정보를 입력하라는 메시지를 표시하는 원격 웹 사이트로 보낼 수 있음을 의미합니다. -u 옵션을 사용하여 자격 증명을 전달하거나 일반적으로 FTP에서 수행되는 것처럼 URL에 붙여 넣을 수 있습니다. 예를 들면 다음과 같습니다.

Curl ftp://사용자 이름: 비밀번호@myhtmlsite

Curl을 사용하면 다음 예와 같이 FTP에서 차용한 기술을 HTTP로 전송할 수 있습니다.

컬 http://사용자 이름:비밀번호 @myhtmlsite/default.htm

Curl은 또한 프록시 서버를 통해 웹 페이지에 대한 액세스를 제공합니다. 따라서 Curl은 Basic, Digest 및 NTLM 모드에서 인증을 위해 프록시 서버를 사용하도록 구성할 수 있습니다.

문서 읽기

서버에 파일 업로드(-T), HTTP 헤더의 정보만 보기(-I), 세부 모드(-V)에서 모든 데이터 보기 등 Curl의 많은 기능을 모두 한 기사에서 다루기는 어렵습니다. ) 및 숨겨진 출력( -s). 다음에 게시된 튜토리얼에서 Curl의 기능을 더 자세히 살펴볼 것을 권장합니다. http://curl.haxx.se/docs .

컬 사용예

이제 Curl의 기본 사항을 배웠으므로 몇 가지 입력을 받아 웹 사이트에서 데이터를 검색하는 간단한 예를 살펴보겠습니다. Curl의 단순성과 사용 편의성, 그리고 -d 매개변수를 사용하여 웹 사이트에 데이터를 보내는 절차를 보여주는 간단한 Whois 도구를 만들어 보겠습니다. 이 예에서 Curl은 IP 주소를 Arin Whois 웹 사이트로 보낸 다음 해당 사이트에서 결과를 검색합니다. Whois는 IP 주소 소유자에 대한 정보를 조회합니다.

각 사이트의 소스 코드가 다르고 Curl이 모든 사이트에서 항상 동일하게 작동하는 것은 아니기 때문에 시작하기 전에 웹 사이트를 조사하는 것이 중요합니다. 사이트를 사전 방문하면 Curl이 작동하는 데 필요한 정보를 수집할 수 있습니다. 이 예에서는 브라우저를 사용하여 웹 사이트를 방문했습니다. http://www.arin.net/whois/, 사이트에 방문자가 관심 있는 IP 주소를 표시하는 단일 데이터 입력 필드가 있음을 확인했습니다. 웹 양식의 일부인 이 필드의 세부 정보를 가져와야 합니다. 이 예에서는 Perl 스크립트 formfind.pl( http://cool.haxx.se/cvs.cgi/curl/perl/contrib/ formfind?rev=HEAD&content-type=text/vnd.viewcvs-markup). Formfind.pl 스크립트는 양식 데이터를 유용한 출력 결과로 변환하고 HTML에서 데이터를 수동으로 검색하기 쉽게 해줍니다. 물론, Formfind를 실행하려면 컴퓨터에 Perl을 배포해야 합니다. 좋은 Win32 Perl 패키지는 ActiveState ActivePerl 웹사이트에서 주문할 수 있습니다. http://www.activestate.com .

예제를 더 자세히 살펴보겠습니다. 먼저 정보를 요청하는 양식이 포함된 웹 사이트를 살펴보겠습니다.

Curl -o whoisOutputFile http://www.arin.net/whois/

이 명령은 http://www.arin.net에서 Whois 페이지를 검색하여 사이트 방문 시 브라우저에서 렌더링되는 원본 HTML 텍스트가 포함된 텍스트 파일 whoisOutputFile에 저장합니다.

그런 다음 양식 데이터를 찾아 선택해야 합니다.

./formfind.pl

Formfind는 양식 변수와 가능한 값을 제공합니다. 이 예에서 출력 결과는 매우 간단합니다(참조: 화면 1).

queryinput이라는 입력 양식 데이터를 참고하세요. 이것은 Curl이 찾고 있는 IP 주소를 보내야 하는 텍스트 필드입니다. 특정 IP 주소는 중요하지 않습니다. 이 예에서는 Microsoft 주소가 사용되었습니다. -d 매개변수를 사용하면 검색된 IP 주소가 queryinput 필드로 전달됩니다.

Curl -d "queryinput= 207.46.133.140" http://ws.arin.net/cgibin/whois.pl

-d 옵션이 포함된 Curl 명령은 검색 중인 IP 주소를 나타내는 양식(이 경우 queryinput)의 데이터를 조회합니다. 이 경우 대상 주소가 변경됩니다. 양식은 whois.pl 스크립트를 나타내는 새 URL에 데이터를 제출해야 합니다. 새 대상 주소는 화면 1의 formfind 출력에서 ​​볼 수 있습니다.

이 예에서는 Whois 응답의 원본 HTML 텍스트도 검색하지만 HTML 태그 그룹에 의해 숨겨져 있습니다. 기본적으로 Curl 상태 메시지에는 문서 크기, 완료율 및 전달 속도가 표시됩니다. 출력을 약간 정리하고 IP 주소를 소유한 조직의 이름으로 필터링할 수 있습니다. -s 옵션을 사용하면 Curl 상태를 비활성화할 수 있습니다. OrgName만 가져오려면 grep을 통해 명령을 실행해야 합니다.

Curl -s -d "queryinput= 207.46.133.140" http://ws.arin.net/cgibin/whois.pl | grep 조직 이름

이 예에서 출력은 OrgName이 Microsoft Corp.임을 보여줍니다.

@echo off 컬 -k -s -d "queryinput= %1" http://ws.arin.net/cgibin/whois.pl | grep 조직 이름


명령줄에서 웹 파일 업로드


실제 실제 예: IP 주소를 변경하려면 라우터(모뎀)를 재부팅해야 합니다. 이렇게 하려면 다음을 수행해야 합니다. 라우터에 로그인하고 유지 관리 페이지로 이동하여 "재부팅" 버튼을 클릭하세요. 이 작업을 여러 번 수행해야 하는 경우 절차를 반복해야 합니다. 동의하세요. 매번 수동으로 이 루틴을 수행하고 싶지는 않습니다. cURL을 사용하면 이 모든 것을 자동화할 수 있습니다. 몇 가지 cURL 명령만으로 인증을 획득하고 라우터에서 작업을 완료할 수 있습니다.

  • cURL은 명령줄을 통해 웹사이트에서 데이터를 검색하는 데 유용합니다.
또 다른 실제 예: 여러 사이트에 대한 일반 통계 표시를 구현하려고 합니다. cURL을 사용하면 이는 완전히 사소한 작업이 됩니다. cURL을 사용하여 통계 수집 서비스(필요한 경우)에서 인증한 다음 (다시 cURL 명령을 사용하여) 필요한 페이지를 얻고 필요한 데이터를 구문 분석합니다. 모든 사이트에 대해 절차가 반복된 다음 최종 결과를 추가하고 표시합니다.

저것들. cURL을 사용하는 경우는 매우 현실적이지만 대부분의 경우 프로그램에 cURL을 사용하는 프로그래머에게는 cURL이 필요합니다.

CURL은 다양한 프로토콜과 인증 방법을 지원하고, 파일을 전송할 수 있으며, 쿠키와 올바르게 작동하고, SSL 인증서, 프록시 등을 지원합니다.

PHP 및 명령줄의 cURL

cURL은 PHP 스크립트와 명령줄의 두 가지 주요 방법으로 사용할 수 있습니다.

서버의 PHP에서 cURL을 활성화하려면 php.ini 파일에서 해당 줄의 주석 처리를 제거해야 합니다.

확장자=php_curl.dll

그런 다음 서버를 재부팅하십시오.

Linux에서는 컬 패키지를 설치해야 합니다.

Debian, Ubuntu 또는 Linux Mint의 경우:

$ sudo apt-get 설치 컬


Fedora, CentOS 또는 RHEL:

$ sudo yum 설치 컬

PHP와 명령줄에서의 사용 차이를 명확하게 확인하기 위해 동일한 작업을 두 번 수행합니다. 먼저 PHP 스크립트에서, 그 다음 명령줄에서 수행합니다. 혼동하지 않도록 노력합시다.

cURL을 사용하여 데이터 검색

PHP에서 cURL을 사용하여 데이터 검색

PHP의 예:

모든 것이 매우 간단합니다.
$target_url- 관심 있는 사이트의 주소. 사이트 주소 뒤에 콜론을 입력하고 포트 주소를 추가할 수 있습니다(포트가 표준 포트와 다른 경우).

컬_초기화- 새 세션을 초기화하고 핸들을 반환합니다. 이 예에서는 핸들이 변수에 할당됩니다. $ch.

그런 다음 cURL 함수를 사용하여 요청을 실행합니다. 컬_exec, 설명자가 매개변수로 전달됩니다.

모든 것이 매우 논리적이지만 이 스크립트가 실행되면 사이트의 내용이 페이지에 표시됩니다. 하지만 콘텐츠를 표시하는 것이 아니라 (이후 처리 또는 구문 분석을 위해) 변수에 쓰고 싶다면 어떻게 해야 할까요?

스크립트에 약간을 추가해 보겠습니다.

0) ( echo "컬 오류: " . 컬_error($ch); ) 컬_close($ch); ?>

우리에겐 줄이 있어요 컬_setopt($ch, CURLOPT_RETURNTRANSFER, 1);.

컬_세톱트- 옵션을 설정합니다. 전체 옵션 목록은 이 페이지에서 확인할 수 있습니다.

손님에게 숨겨짐

$response_data = 컬_exec($ch);

이제 스크립트 값이 $response_data 변수에 할당되어 추가 작업을 수행할 수 있습니다. 예를 들어 해당 내용을 표시할 수 있습니다.

스티치

If (curl_errno($ch) > 0) ( echo "컬 오류: " .curl_error($ch); )

오류가 발생할 경우 디버깅을 위해 사용됩니다.

명령줄에서 cURL을 사용하여 데이터 검색

명령줄에 다음을 입력하세요.

대신 어디에 mi-al.ru- 귀하의 웹사이트 주소.

화면에 결과를 표시하는 대신 변수에 데이터를 복사해야 하는 경우 다음을 수행하십시오.

Temp="curl mi-al.ru"

그러나 일부 데이터는 여전히 표시됩니다.

표시되지 않게 하려면 키를 추가하세요. -에스:

Temp="curl -s mi-al.ru"

녹음된 내용을 확인할 수 있습니다.

에코 $temp | 더 적은

기본 및 HTTP 인증

간단히 말해서 인증은 사용자 이름과 비밀번호를 입력하는 것입니다.

기본 인증은 서버측 인증입니다. 이를 위해 두 개의 파일이 생성됩니다. .htaccess그리고 .htpasswd

.htaccess 파일의 내용은 다음과 같습니다.

AuthName "등록된 사용자에게만!" AuthType Basic에는 유효한 사용자 AuthUserFile /home/freeforum.biz/htdocs/.htpassw가 필요합니다.


.htpasswd 파일의 내용은 다음과 같습니다.

메일:CRdiI.ZrZQRRc

저것들. 로그인 및 비밀번호 해시.

비밀번호로 보호된 폴더에 접근하려고 하면 브라우저에 다음과 같은 내용이 표시됩니다.

HTTP 인증은 웹사이트의 양식에 로그인 정보와 비밀번호를 입력하는 경우입니다. 메일, 포럼 등에 로그인할 때 사용되는 인증입니다.

기본 cURL 인증(PHP)

웹사이트가 있습니다

손님에게 숨겨짐

초기 스크립트를 시도해 보겠습니다.

0) ( echo "컬 오류: " . cur_error($ch); ) else ( echo $response_data; ) 컬_close($ch); ?>

스크립트에서는 오류가 없다고 믿지만 출력은 전혀 마음에 들지 않습니다.

두 줄을 추가합니다.

Curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); cur_setopt($ch, CURLOPT_USERPWD, "ru-board:ru-board");

첫 번째 줄에서는 인증 유형(기본)을 설정합니다. 두 번째 줄에는 콜론으로 구분된 이름과 비밀번호가 포함되어 있습니다(이 경우 이름과 비밀번호는 동일합니다 - ru-board). 결과는 다음과 같습니다.

0) ( echo "컬 오류: " . cur_error($ch); ) else ( echo $response_data; ) 컬_close($ch); ?> 시도해 보겠습니다: 30946 좋아요! 기본 cURL 인증(명령줄에서) 명령줄에서도 다음 한 줄로 동일한 인증을 수행할 수 있습니다. 컬 -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/

인증 유형을 지정하는 것을 잊지 않았습니다. 단지 cURL에서는 기본 인증 유형이 기본값이라는 것뿐입니다.

명령줄에서 모든 작업이 너무 빨리 진행되어 좌절감에 다음 프로그램을 작성했습니다. 그녀는 사이트에 연결하여 최신 업데이트를 다운로드합니다.

Temp=`curl -s -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/ | grep -E -o "Update_FED_201(1).(2).(2).7z" | 유니크 | 꼬리 -n 1`; 컬 -o $temp -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/$temp

몇 가지 명령만 더 추가하면 다음을 추가할 수 있습니다.

  • 지정된 디렉토리에 아카이브의 압축을 푼다.
  • ConsultantPlus 업데이트 실행(업데이트)
  • 사용 가능한 최신 업데이트가 이미 다운로드되었는지 또는 새 업데이트가 나타났는지 확인할 수 있습니다.
  • 매일 업데이트하려면 Cron에 모두 추가하세요.
HTTP 인증 cURL

PHP의 HTTP cURL 인증

우리는 다음을 알아야 합니다:

  • 인증 데이터를 보낼 주소
  • 전송 방법 GET 또는 POST
  • 로그인
  • 비밀번호
때때로 이 데이터로는 충분하지 않습니다. 그것을 알아 봅시다.

데이터를 보내야 하는 주소는 인증 양식에서 가져올 수 있습니다. 예를 들어:

우리는 부동산을 보고 있어요 행동. 저것들. 마지막 페이지는 로그인.php. 다음과 같이 전체 주소가 필요합니다.

손님에게 숨겨짐

여기서는 전송 방법도 찾습니다. 방법="게시"

나는 또한 로그인과 비밀번호를 알고 있습니다: admin 및 qwerasdfzxcv
저것들. POST 메서드를 사용하여 양식에서 문자열이 서버로 전송됩니다. 이론적으로는 새 줄을 추가한 이전 스크립트가 작동해야 합니다. 저것들. 인증이 이루어져야 합니다.

0) ( echo "컬 오류: " . 컬_error($ch); ) else ( ) 컬_close($ch); ?>

스크립트의 새 줄

컬_setopt($ch, CURLOPT_POSTFIELDS, "LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv");

여기 컬_세톱트- cURL 옵션을 설정하는 데 이미 익숙한 기능입니다. CURLOPT_POSTFIELDS- 우리가 설정하는 옵션의 이름입니다. CURLOPT_POSTFIELDS POST 메서드를 사용하여 전송된 모든 데이터를 포함합니다. 뭐, 라인 자체는 LOGIN_USER=관리자&LOGIN_PASSWD=qwerasdfzxcv- 이것은 우리가 전송하는 것과 동일한 데이터입니다.

양식을 주의 깊게 살펴보면 숨겨진 필드도 포함되어 있음을 알 수 있습니다. 그리고 데이터는 JavaScript로 처리되거나 보완될 수 있습니다. 이 모든 것을 연구할 수 있지만 저는 더 간단한 방법을 선호합니다.

저는 Wireshark를 사용하고 있습니다. 이 프로그램은 트래픽을 스니핑(가로채기)하도록 설계되었습니다. 그리고 사이트에 정확히 무엇이 전송되고 있는지 확인하는 것이 매우 편리합니다.

이 작은 비디오를 시청하세요:


저것들. 데이터가 전송되는 주소로 추측이 맞았습니다. 그러나 전송된 문자열은 훨씬 더 복잡한 것으로 밝혀졌습니다.

올바른 매개변수를 입력하고 스크립트를 약간 수정하여 로그인할 뿐만 아니라 라우터로부터 무언가도 수신하도록 했습니다.

0) ( echo "컬 오류: " . 컬_오류($ch); ) else ( $target_url2 = "http://188.35.8.64:8080/bsc_wlan.php"; $ch2 = 컬_init($target_url2); 컬_setopt($ ch2, CURLOPT_RETURNTRANSFER, 1); $response_data2 = cur_exec($ch2); preg_match("|f.ssid.value = "(.*)";|", $response_data2, $results2); , "", $results2); $results2 = str_replace("";", "", $results2); echo "Wi-Fi 네트워크 이름: $결과2
"; preg_match("|f_wpa.wpapsk1.value(.*)";|", $response_data2, $results3); $results3 = str_replace("f_wpa.wpapsk1.value", "", $results3); $results3 = str_replace("="", "", $results3); $results3 = str_replace("";", "", $results3); echo "Wi-Fi 네트워크 비밀번호: $결과3"; ) 컬_닫기($ch); ?>

그런데 소유자가 비밀번호를 업데이트하지만 펌웨어는 업데이트하지 않으면 새 비밀번호는 항상 다음에서 볼 수 있습니다.

손님에게 숨겨짐

(이는 D-Link DIR-300, D-Link DIR-320, D-Link DAP-1353 라우터에서 잘 알려진 취약점입니다.)

명령줄에서 HTTP cURL 인증

우리는 이미 전체 주소와 전송될 문자열을 알고 있습니다. 그래서 간단합니다.

Curl --data "ACTION_POST=LOGIN&FILECODE=&VERIFICATION_CODE=&LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv&login=Log+In+&VER_CODE=" http://188.35.8.64:8080/login.php

우리는 이미 이러한 기한을 고려했기 때문에 모든 것이 명확하다고 생각합니다. 이해가 안되는 분이 계시다면 댓글로 질문해주세요.

cURL을 사용하여 데이터를 검색하고 구문 분석하는 예는 다음 명령 세트입니다.

Curl -s --data "ACTION_POST=LOGIN&FILECODE=&VERIFICATION_CODE=&LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv&login=Log+In+&VER_CODE=" http://188.35.8.64:8080/login.php > /dev/null && echo -e "nn " && echo "Wi-Fi 네트워크 이름" && 컬 -s http://188.35.8.64:8080/bsc_wlan.php | grep -E "f.ssid.value = "(.)*";" | sed "s/f.ssid.value = "//" | sed "s/";//" && echo "Wi-Fi 네트워크 비밀번호" && 컬 -s http://188.35.8.64:8080/bsc_wlan.php | grep -E "f_wpa.wpapsk1.(.)*";" | sed "s/f_wpa.wpapsk1.value//" | sed "s/";//" | sed "s/="//"

이 제목은 "복잡한" 승인 사례로 작성하는 것이 더 정확할 것입니다. 저것들. "복잡하다"라는 단어를 따옴표 안에 넣으세요. 전송이 발생하는 위치, 필드 이름이 무엇인지, 정확히 전송되는 내용 등이 명확하지 않은 경우 언뜻 보기에는 복잡해 보입니다.

그러나 실제로는 모두 POST 또는 GET 메서드로 귀결됩니다. 전송되는 내용을 정확히 이해하려면 양식이 포함된 페이지를 디스크에 저장하고 제출 버튼으로 전송하기 위해 생성된 데이터를 표시하는 기능을 추가할 수 있습니다. 아니면 더 간단합니다. 저처럼 Wireshark도 있습니다.

데이터가 정확하지만 인증이 이루어지지 않는 경우 다음 방향으로 파헤쳐야 합니다.

  • 올바른 리퍼러 문자열을 설정하세요
  • "올바른" 사용자 에이전트 문자열을 설정하십시오.
이 모든 작업은 기본적인 cURL 방법을 사용하여 수행할 수 있지만 이에 대해서는 다루지 않겠습니다. 수업은 이미 충분히 길었지만 cURL을 사용하여 몇 가지 트릭도 보여주고 싶었습니다.

팁과 요령 cURL

CURLOPT_COOKIEJAR 외에 cURL 및 쿠키 수신

cURL이 쿠키를 올바르게 처리한다는 것은 이미 분명하다고 생각합니다. 즉, 쿠키를 저장하고, 서버가 요청할 때 사용하는 등의 작업을 합니다. 하지만 때로는 쿠키를 저장해야 할 때도 있습니다. CURLOPT_COOKIEJAR라는 옵션이 있지만 항상 사용할 수 있는 것은 아닙니다. 이것이 우리의 첫 번째 트릭에 전념하는 것입니다.

때로는 PHP가 서버에 구성되는 방식으로 인해 CURLOPT_COOKIEJAR(수신된 쿠키를 파일에 저장할 수 있음) 및 CURLOPT_COOKIEFILE(파일의 쿠키를 사용할 수 있음)과 같은 옵션을 사용할 수 없습니다. 왜냐하면 그들은 이러한 옵션을 사용하면 서버에서 모든 파일을 훔칠 수 있다고 말합니다. 이 문제에 대한 해결책은 다음과 같습니다.

1) CURLOPT_FOLLOWLOCATION을 사용하지 않습니다.
2) 사용 컬_setopt($ch, CURLOPT_HEADER, 1)
3) 다음과 같이 헤더에서 쿠키를 수집합니다.

Preg_match_all("|쿠키 설정: (.*);|U", $content, $results); $cookies = implode(";", $results);

4) 컬_setopt($ch, CURLOPT_COOKIE, $cookies)를 사용하여 설정합니다.

두 번째 팁. 우리는 공격자에서 피해자로 변할 수 있습니다. 중간자 공격의 피해자가 되지 않기 위해 우리는 이렇게 합니다.

모두들 CURLOPT_SSL_VERIFYPEER 설정을 false 또는 0으로 설정하는 것을 중지하십시오. PHP 설치에 최신 루트 CA 인증서 세트가 없으면 컬 웹사이트에서 인증서를 다운로드하여 서버에 저장하십시오.

손님에게 숨겨짐

그런 다음 Windows의 경우와 같이 php.ini 파일에 경로를 설정합니다.

Curl.cainfo=c:phpcacert.pem

CURLOPT_SSL_VERIFYPEER를 비활성화하면 우리가 원하지 않는 중간자(MITM) 공격이 허용됩니다!

자, 오늘의 마지막 팁입니다. 많은 수의 비동기 컬 요청이 가능하다는 것을 알고 계셨습니까?

이를 위해 다음을 사용할 수 있습니다. 컬_다중_초기화. 공식 문서의 세부 사항 및 예제 코드

손님에게 숨겨짐

손님에게 숨겨짐


명령줄의 cURL 정보

손님에게 숨겨짐


cURL 강의의 두 번째 부분인 ""도 러시아어로 읽을 수 있도록 준비되었습니다.

이 문서에서는 귀하가 네트워킹과 HTML의 기본 사항을 알고 있다고 가정합니다.

좋은 컴퓨터 시스템을 구축하려면 스크립트 작성 능력이 필수적입니다. 쉘 스크립트와 자동화된 명령을 실행하는 다양한 프로그램을 갖춘 Unix 시스템의 확장성은 Unix 시스템이 성공한 이유 중 하나입니다.

웹으로 이동하는 애플리케이션의 수가 증가함에 따라 HTTP 스크립트에 대한 주제가 점점 대중화되고 있습니다. 이 영역의 중요한 작업은 인터넷에서 자동으로 정보를 검색하고, 웹 서버로 데이터를 전송하거나 다운로드하는 것입니다.

Curl은 다양한 종류의 URL 조작 및 전송을 수행할 수 있는 명령줄 도구입니다. 이 문서에서는 간단한 HTTP 요청을 만드는 데 중점을 둡니다. 입력할 위치를 이미 알고 있다고 가정합니다.

# 컬 --help

# 컬 --수동

컬에 대한 정보를 얻으려면.

Curl은 모든 것을 대신해 주는 도구가 아닙니다. 요청을 생성하고, 데이터를 수신하고, 데이터를 보냅니다. 모든 것을 하나로 묶으려면 일종의 "접착제"가 필요할 수 있습니다. 아마도 스크립트 언어(예: bash)나 수동 호출이 필요할 수 있습니다.

1. HTTP 프로토콜

HTTP는 웹 서버로부터 데이터를 수신할 때 사용되는 프로토콜입니다. 이는 TCP/IP를 기반으로 구축된 매우 간단한 프로토콜입니다. 또한 이 프로토콜을 사용하면 나중에 설명하겠지만 여러 가지 방법을 사용하여 클라이언트에서 서버로 정보를 보낼 수 있습니다.

HTTP는 어떤 작업을 요청하기 위해 클라이언트에서 서버로 전송되는 ASCII 텍스트 문자열입니다. 요청을 받으면 서버는 여러 서비스 텍스트 줄로 클라이언트에 응답한 다음 실제 콘텐츠로 응답합니다.

컬 -v 스위치를 사용하면 컬이 서버에 보내는 명령과 기타 정보 텍스트를 볼 수 있습니다. -v 스위치는 아마도 컬과 웹 서버 간의 상호 작용을 디버그하거나 이해하는 유일한 방법일 것입니다.

2. URL

URL 형식(Uniform Resource Locator)은 인터넷의 특정 리소스 주소를 지정합니다. 아마도 알고 계실 것입니다. 예를 들어 URL은 http://curl.haxx.se 또는 https://yourbank.com입니다.

3. 받기(GET) 페이지

가장 간단하고 일반적인 HTTP 요청은 URL의 콘텐츠를 가져오는 것입니다. URL은 웹페이지, 이미지 또는 파일에 연결될 수 있습니다. 클라이언트는 서버에 GET 요청을 보내고 요청된 문서를 받습니다. 명령을 실행하면

# 컬 http://curl.haxx.se

터미널 창에 웹 페이지 출력이 표시됩니다. 이 URL에 포함된 전체 HTML 문서입니다.

모든 HTTP 응답에는 일반적으로 숨겨져 있는 헤더 세트가 포함되어 있습니다. 문서 자체와 함께 이를 보려면 컬 -i 옵션을 사용하십시오. -I 스위치를 사용하여 헤더만 요청할 수도 있습니다(이렇게 하면 컬이 HEAD 요청을 강제로 수행하게 됨).

4. 모양

양식은 사용자가 데이터를 입력하고 "확인" 또는 "제출" 버튼을 클릭한 후 데이터가 서버로 전송되는 필드가 포함된 HTML 페이지로 웹 사이트를 표시하는 기본 방법입니다. 그러면 서버는 수신된 데이터를 사용하여 다음에 무엇을 할지 결정합니다. 데이터베이스에서 정보를 조회하거나, 입력한 주소를 지도에 표시하거나, 오류 메시지를 추가하거나, 해당 정보를 사용하여 사용자를 인증합니다. 물론 서버 측에는 데이터를 수신하는 일부 프로그램이 있습니다.

4.1 받기

GET 양식은 다음과 같이 GET 메서드를 사용합니다.

브라우저에서 이 코드를 열면 텍스트 필드와 "확인"이라는 버튼이 있는 양식이 표시됩니다. "1905"를 입력하고 확인을 클릭하면 브라우저는 따라갈 새 URL을 생성합니다. URL은 이전 URL의 경로와 "junk.cgi?birthyear=1905&press=OK"와 같은 문자열로 구성된 문자열로 표시됩니다.

예를 들어, 양식이 "www.hotmail.com/when/birth.html"에 있는 경우 확인 버튼을 클릭하면 "www.hotmail.com/when/junk.cgi? 출생연도=1905&press=OK" .

대부분의 검색 엔진은 이런 방식으로 작동합니다.

컬이 GET 요청을 생성하도록 하려면 양식에서 예상한 내용을 입력하기만 하면 됩니다.

# 컬 "www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK"

4.2 포스트

GET 메소드를 사용하면 입력된 모든 정보가 브라우저의 주소 표시줄에 표시됩니다. 이는 페이지를 북마크해야 할 때 유용할 수 있지만 양식 필드에 민감한 정보를 입력하거나 필드에 입력된 정보의 양이 너무 많아(읽을 수 없는 URL이 발생하는 경우) 명백한 단점이 됩니다.

HTTP 프로토콜은 POST 메서드를 제공합니다. 이를 통해 클라이언트는 URL과 별도로 데이터를 전송하므로 주소 표시줄에 해당 데이터가 표시되지 않습니다.

POST 요청을 생성하는 양식은 이전 양식과 유사합니다.

Curl은 다음과 같은 데이터를 사용하여 POST 요청을 생성할 수 있습니다.

# 컬 -d "birthyear=1905&press=%20OK%20" www.hotmail.com/when/junk.cgi

이 POST 요청은 가장 널리 사용되는 방법인 "Content-Type application/x-www-form-urlencoded"를 사용합니다.

서버에 보내는 데이터는 올바르게 인코딩되어야 하며, 컬은 이를 수행하지 않습니다. 예를 들어 데이터에 공백이 포함되도록 하려면 공백을 %20 등으로 바꿔야 합니다. 이 문제에 대한 관심 부족은 데이터가 제대로 전송되지 않는 일반적인 실수입니다.

1995년에 HTTP를 통해 데이터를 전송하는 추가 방법이 정의되었습니다. 이는 RFC 1867에 문서화되어 있으므로 이 방법을 RFC1867 게시라고도 합니다.

이 방법은 주로 파일 업로드를 더 잘 지원하도록 설계되었습니다. 사용자가 파일을 업로드할 수 있는 양식은 HTML에서 다음과 같습니다.

Content-Type은 multipart/form-data로 설정되어 있습니다.

컬을 사용하여 이 양식으로 데이터를 보내려면 다음 명령을 입력하십시오.

# 컬 -F 업로드=@localfilename -F 프레스=확인

4.4 숨겨진 필드

HTML 애플리케이션에서 상태 정보를 전달하는 일반적인 방법은 양식에서 숨겨진 필드를 사용하는 것입니다. 숨겨진 필드는 채워지지 않으며 사용자에게 표시되지 않으며 일반 필드와 동일한 방식으로 전송됩니다.

하나의 표시 필드, 하나의 숨겨진 필드 및 확인 버튼이 있는 양식의 간단한 예:

컬을 사용하여 POST 요청을 보내려면 해당 필드가 숨겨져 있는지 여부를 생각할 필요가 없습니다. 컬의 경우 모두 동일합니다.

# 컬 -d "생년월일=1905&press=OK&사람=다니엘"

4.5 POST 요청이 어떤 모습인지 알아보세요

양식을 작성하고 컬을 사용하여 서버에 데이터를 보내려는 경우 POST 요청이 브라우저를 사용하여 수행한 것과 정확히 동일하게 보이도록 할 수 있습니다.

POST 요청을 보는 쉬운 방법은 양식이 포함된 HTML 페이지를 디스크에 저장하고 방법을 GET으로 변경한 후 "제출" 버튼을 클릭하는 것입니다(데이터가 전송될 URL도 변경할 수 있음).

GET 양식을 사용할 때 예상한 대로 "?" 문자로 구분된 URL에 첨부된 데이터가 표시됩니다.

5. 넣어

아마도 HTTP 서버에 데이터를 업로드하는 가장 좋은 방법은 PUT을 사용하는 것입니다. 다시 말하지만, 이를 위해서는 수행할 작업과 HTTP PUT 스트림을 수락하는 방법을 아는 백엔드의 프로그램(스크립트)이 필요합니다.

컬을 사용하여 서버에 파일을 보냅니다.

# 컬 -T 업로드 파일 www.uploadhttp.com/receive.cgi

6. 인증

인증 - 서버에 사용자 이름과 비밀번호를 전달한 후 필요한 요청을 완료할 수 있는 권한이 있는지 확인합니다. 기본 인증(curl이 기본적으로 사용함)은 일반 텍스트를 기반으로 합니다. 즉, 사용자 이름과 비밀번호는 암호화되지 않고 Base64 알고리즘으로 약간만 "포그"되므로 사용자와 사용자 사이의 경로에 있는 공격자가 다음과 같은 행위를 할 수 있습니다. 이 정보 HTTP 서버를 찾으십시오.

컬에게 사용자 이름과 비밀번호를 사용하도록 지시:

# 컬 -u 이름:비밀번호 www.secrets.com

사이트에서는 다른 인증 방법(서버가 헤더에 쓰는 내용 확인)을 사용해야 할 수 있습니다. 이 경우 --ntlm, --digest, --negotiate 또는 심지어 --anyauth 스위치를 사용할 수 있습니다. 때로는 외부 HTTP 서버에 대한 액세스가 프록시를 통해 발생하는 경우가 있는데, 이는 회사와 기업에서 흔히 수행됩니다. HTTP 프록시는 인터넷에 액세스하기 위해 자신의 사용자 이름과 비밀번호가 필요할 수 있습니다. 해당 컬 키:

# 컬 -U 프록시 사용자:프록시암호 컬.haxx.se

프록시에 NTLM 방법을 사용한 인증이 필요한 경우 --proxy-ntlm을 지정하고, Digest 방법인 경우 --proxy-digest를 지정합니다.

-u 및 -U 옵션에 비밀번호를 지정하지 않으면 컬이 대화식으로 비밀번호를 묻습니다.

컬이 실행 중일 때 시작 문자열(및 키와 비밀번호 포함)이 작업 목록에서 시스템의 다른 사용자에게 표시될 수 있습니다. 이를 방지하는 방법이 있습니다. 이에 대한 자세한 내용은 아래에서 확인하세요.

7. 추천인

HTTP 요청에는 사용자가 이 리소스를 방문한 URL을 나타내는 "참조자" 필드가 포함될 수 있습니다. 일부 프로그램/스크립트는 "참조자" 필드를 확인하고 사용자가 알 수 없는 페이지에서 온 경우 요청을 실행하지 않습니다. 비록 이것이 어리석은 확인 방법임에도 불구하고 많은 스크립트가 여전히 이를 사용하고 있습니다. 컬을 사용하면 "참조자" 필드에 무엇이든 넣을 수 있으므로 원하는 대로 작동하게 할 수 있습니다.

이는 다음과 같이 수행됩니다.

# 컬 -e http://curl.haxx.se daniel.haxx.se

8. 사용자 에이전트

모든 HTTP 요청은 사용자의 클라이언트 애플리케이션을 지정하는 "User-Agent" 필드를 지원합니다. 많은 웹 애플리케이션은 이 정보를 사용하여 어떤 방식으로든 페이지를 렌더링합니다. 웹 프로그래머는 모양을 개선하고 다양한 javascript, vbscript 스크립트 등을 사용하기 위해 다양한 브라우저 사용자를 위해 여러 버전의 페이지를 만듭니다.

때로는 컬이 브라우저에서 본 것과 동일하지 않은 페이지를 반환하는 경우가 있습니다. 이 경우 "사용자 에이전트" 필드를 사용하여 다시 한 번 서버를 속이는 것이 적절합니다.

Windows 2000 시스템에서 컬을 Internet Explorer로 위장합니다.

# 컬 -A "Mozilla/4.0(호환; MSIE 5.01; Windows NT 5.0)"

Linux 시스템에서 Netscape 4.73이 되어보는 것은 어떨까요(PIII):

# 컬 -A "Mozilla/4.73 (X11; U; Linux 2.2.15 i686)"

9. 리디렉션

귀하의 요청에 응답할 때 서버는 페이지 자체 대신 원하는 페이지로 이동하기 위해 브라우저가 다음에 이동해야 하는 위치에 대한 표시를 반환할 수 있습니다. 브라우저로의 리디렉션을 나타내는 헤더는 "위치:"입니다.

기본적으로 컬은 "위치:"에 지정된 주소로 이동하지 않고 단순히 평소대로 페이지를 표시합니다. 하지만 다음과 같이 지시할 수 있습니다.

# 컬 -L www.sitethatredirects.com

컬을 사용하여 다른 페이지로 즉시 리디렉션되는 사이트에 대한 POST 요청을 수행하는 경우 -L 및 -d/-F 조합을 안전하게 사용할 수 있습니다. Curl은 첫 번째 페이지에 대해 POST 요청을 생성하고 다음 페이지에 대해 GET 요청을 생성합니다.

10. 쿠키

쿠키를 사용하면 웹 브라우저가 클라이언트 측의 상태를 제어합니다. 쿠키는 콘텐츠가 첨부된 이름입니다. 쿠키를 전송함으로써 서버는 다음에 쿠키를 전송해야 하는 경로와 호스트 이름, 쿠키의 수명 및 기타 매개변수를 클라이언트에게 알려줍니다.

클라이언트가 허용된 쿠키에 지정된 주소로 서버에 연결되면 클라이언트는 해당 쿠키를 서버에 보냅니다(수명 기간이 만료되지 않은 경우).

많은 애플리케이션과 서버는 이 방법을 사용하여 여러 요청을 하나의 논리적 세션으로 결합합니다. 컬이 이 기능을 수행하려면 브라우저처럼 쿠키를 저장하고 보낼 수 있어야 합니다.

컬을 사용하여 페이지를 수신할 때 서버에 쿠키를 보내는 가장 간단한 방법은 명령줄에 적절한 스위치를 추가하는 것입니다.

# 컬 -b "이름=다니엘" www.cookiesite.com

쿠키는 일반 HTTP 헤더로 전송됩니다. 이를 통해 컬은 헤더를 저장하여 쿠키를 저장할 수 있습니다. 컬을 사용하여 쿠키를 저장하는 작업은 다음 명령으로 수행됩니다.

# 컬 -D headers_and_cookies www.cookiesite.com

(그런데 쿠키를 저장하려면 -c 스위치를 사용하는 것이 더 좋습니다. 자세한 내용은 아래에서 설명합니다.)

컬에는 모든 기능을 갖춘 쿠키 핸들러가 있는데, 이는 서버에 다시 연결하고 지난번에 저장한(또는 수동으로 수정한) 쿠키를 사용하려는 경우에 유용합니다. 파일에 저장된 쿠키를 사용하려면 다음과 같이 컬을 호출하십시오.

# 컬 -b 저장된_쿠키_인_파일 www.cookiesite.com

-b 스위치를 지정하면 Curl의 "쿠키 엔진"이 활성화됩니다. 컬이 쿠키만 허용하도록 하려면 -b를 사용하여 존재하지 않는 파일을 지정하세요. 예를 들어, 컬이 페이지에서 쿠키를 수락한 다음 리디렉션을 따르도록 하려면(아마도 방금 수락한 쿠키를 제공할 수도 있음) 다음과 같이 컬을 호출할 수 있습니다.

# 컬 -b nada -L www.cookiesite.com

Curl은 Netscape 및 Mozilla 형식의 쿠키를 읽고 쓸 수 있습니다. 이는 브라우저와 자동 스크립트 간에 쿠키를 교환하는 편리한 방법입니다. -b 스위치는 주어진 쿠키가 지정된 브라우저의 쿠키인지 여부를 자동으로 감지하고 그에 따라 처리하며, -c/--cookie-jar 스위치를 사용하면 작업이 완료될 때 컬이 새 쿠키를 쓰도록 강제할 수 있습니다.

# 컬 -b 쿠키.txt -c newcookies.txt www.cookiesite.com

11. HTTPS

HTTP 전송을 보호하는 방법에는 여러 가지가 있습니다. 이 문제를 해결하는 가장 잘 알려진 프로토콜은 HTTPS, 즉 HTTP over SSL입니다. SSL은 네트워크를 통해 주고받는 모든 데이터를 암호화하므로 귀하의 정보가 기밀로 유지될 가능성이 높아집니다.

Curl은 무료 OpenSSL 라이브러리를 사용하여 HTTPS 서버에 대한 요청을 지원합니다. 요청은 일반적인 방식으로 발생합니다.

# 컬 https://that.secure.server.com

11.1 인증서

HTTPS 세계에서는 인증을 위해 사용자 이름과 비밀번호 외에 인증서도 사용합니다. Curl은 클라이언트측 인증서를 지원합니다. 모든 인증서는 컬이 작업을 시작하기 전에 입력해야 하는 암호로 잠겨 있습니다. 암호는 명령줄에서 지정하거나 대화식으로 입력할 수 있습니다. 컬의 인증서는 다음과 같이 사용됩니다.

# 컬 -E mycert.pem https://that.secure.server.com

Curl은 또한 서버 인증서를 로컬에 저장된 인증서와 비교하여 서버의 신뢰성을 확인합니다. 불일치가 있으면 컬은 연결을 거부합니다. 인증 확인을 무시하려면 -k 스위치를 사용하십시오.

인증서에 대한 자세한 내용은 http://curl.haxx.se/docs/sslcerts.html에서 확인할 수 있습니다.

12. 사용자 정의 요청 헤더

개별 컬 요청의 요소를 변경하거나 추가해야 할 수도 있습니다.

예를 들어 POST 요청을 PROPFIND로 변경하고 데이터를 "Content-Type: text/xml"(일반 Content-Type 대신)로 보낼 수 있습니다.

# 컬 -d " " -H "콘텐츠 유형: 텍스트/xml" -X PROPFIND url.com

내용 없이 제목을 지정하여 제목을 제거할 수 있습니다. 예를 들어 "Host:" 헤더를 제거하여 요청을 "비어 있게" 만들 수 있습니다.

# 컬 -H "호스트:" http://mysite.com

제목을 추가할 수도 있습니다. 서버에 "Destination:" 헤더가 필요할 수 있습니다.

# 컬 -H "대상: http://moo.com/nowhere" http://url.com

13. 디버깅

사이트가 브라우저 요청과 다르게 컬 요청에 응답하는 경우가 종종 있습니다. 이 경우 컬을 브라우저와 최대한 유사하게 만들어야 합니다.

  • --trace-ascii 스위치를 사용하여 쿼리에 대한 자세한 기록을 저장하면 쿼리를 자세히 조사하고 문제를 이해할 수 있습니다.
  • 쿠키를 확인하고 필요한 경우 사용하십시오(-b를 읽고 -c를 저장).
  • "user-agent" 필드에 널리 사용되는 최신 브라우저 중 하나를 지정하세요.
  • 브라우저와 마찬가지로 "참조자" 필드를 입력합니다.
  • POST 요청을 사용하는 경우 모든 필드가 브라우저와 동일한 순서로 전송되는지 확인하세요(위의 4.5 참조).

이 어려운 작업에 대한 좋은 도우미는 Mozilla/Firefox용 LiveHTTPHeader 플러그인입니다. 이 플러그인을 사용하면 이 브라우저가 보내고 받는 모든 헤더를 볼 수 있습니다(HTTPS를 사용하는 경우에도).

낮은 수준의 접근 방식은 ethereal 또는 tcpdump와 같은 프로그램을 사용하여 네트워크에서 HTTP 트래픽을 캡처한 다음 브라우저에서 수신하고 보낸 헤더를 분석하는 것입니다(HTTPS는 이 접근 방식을 효과적이지 않게 만듭니다).

RFC 2616은 HTTP 프로토콜을 이해하려는 사람이라면 반드시 읽어야 합니다.

RFC 2396은 URL 구문을 설명합니다.

RFC 2109는 쿠키 작동 방식을 정의합니다.

RFC 1867은 파일 업로드 포스트 형식을 정의합니다.

http://openssl.planetmirror.com - OpenSSL 프로젝트 홈 페이지

http://curl.haxx.se - cURL 프로젝트 홈페이지

웹 개발자의 삶은 어려움에 가려져 있습니다. 이러한 어려움의 원인을 알 수 없을 때 특히 불쾌합니다. 요청 전송, 응답 또는 타사 라이브러리에 문제가 있습니까? 아니면 외부 API에 버그가 있습니까? 우리의 삶을 더 편리하게 만들어주는 다양한 장치가 있습니다. 개인적으로 매우 유용하다고 생각하는 몇 가지 명령줄 도구는 다음과 같습니다.

곱슬 곱슬하다
cURL은 wget과 유사하게 다양한 프로토콜을 통해 데이터를 전송하는 프로그램입니다. 주요 차이점은 기본적으로 wget은 파일에 저장하는 반면 cURL은 명령줄에 출력한다는 것입니다. 이를 통해 웹사이트 콘텐츠를 매우 쉽게 볼 수 있습니다. 예를 들어 현재 외부 IP를 빠르게 가져오는 방법은 다음과 같습니다.

$ 컬 ifconfig.me 93.96.141.93
옵션 -나(제목 표시) 및 -나(헤더만 표시) cURL을 HTTP 응답을 디버깅하고 서버가 보내는 내용을 정확히 분석하기 위한 훌륭한 도구로 만듭니다.

$ 컬 -I habrahabr.ru HTTP/1.1 200 OK 서버: nginx 날짜: 2011년 8월 18일 목요일 14:15:36 GMT 콘텐츠 유형: text/html; charset=utf-8 연결: 연결 유지 연결 유지: 시간 초과=25
매개변수 -엘또한 유용하며 cURL이 자동으로 리디렉션을 따르도록 합니다. cURL은 HTTP 인증, 쿠키, HTTP 프록시를 통한 터널링, 헤더의 수동 설정 등을 지원합니다.

포위
Siege는 부하 테스트 도구입니다. 게다가 편리한 옵션도 있어요 -g, 이는 다음과 매우 유사합니다. 컬 -iL이지만 추가적으로 http 요청 헤더도 표시됩니다. 다음은 google.com의 예입니다(간결성을 위해 일부 제목이 제거됨).

$ siege -g www.google.com GET / HTTP/1.1 호스트: www.google.com 사용자 에이전트: JoeDog/1.00 (X11; I; Siege 2.70) 연결: close HTTP/1.1 302 발견 위치: http:// www.google.co.uk/ 콘텐츠 유형: text/html; charset=UTF-8 서버: gws Content-Length: 221 연결: close GET / HTTP/1.1 호스트: www.google.co.uk User-Agent: JoeDog/1.00 (X11; I; Siege 2.70) 연결: close HTTP/ 1.1 200 OK 콘텐츠 유형: text/html; charset=ISO-8859-1 X-XSS-보호: 1; 모드=차단 연결: 닫기
하지만 Siege가 정말 좋은 점은 부하 테스트입니다. 아파치 벤치마크와 마찬가지로 ab, 사이트에 많은 병렬 요청을 보내고 트래픽을 처리하는 방법을 확인할 수 있습니다. 다음 예에서는 30초 동안 20개의 쿼리로 Google을 테스트한 후 결과를 인쇄하는 방법을 보여줍니다.

$ siege -c20 www.google.co.uk -b -t30s ... 서버 포위 해제... 완료. 트랜잭션: 1400회 조회수 가용성: 100.00% 경과 시간: 29.22초 전송된 데이터: 13.32MB 응답 시간: 0.41초 트랜잭션 속도: 47.91트랜스/초 처리량: 0.46MB/초 동시성: 19.53 성공적인 트랜잭션: 1400 실패한 트랜잭션: 0 가장 긴 트랜잭션: 4.08 최단 거래: 0.08
Siege의 가장 유용한 기능 중 하나는 단일 주소뿐만 아니라 파일의 URL 목록에서도 작동할 수 있다는 것입니다. 이는 동일한 URL을 반복해서 누르는 대신 실제 사이트 트래픽을 시뮬레이션할 수 있기 때문에 로드 테스트에 유용합니다. 예를 들어 Siege를 사용하여 Apache 로그의 주소를 사용하여 서버를 로드하는 방법은 다음과 같습니다.

$ cut -d " " -f7 /var/log/apache2/access.log > urls.txt $ siege -c -b -f urls.txt
응그레프
심각한 트래픽 분석을 위해 수천 개의 설정, 필터 및 구성을 갖춘 Wireshark가 있습니다. 명령줄 버전도 있습니다 샤크. 그러나 간단한 작업의 경우 Wireshark의 기능이 중복된다고 생각합니다. 그래서 강력한 무기가 필요하지 않으면 . 네트워크 패킷으로 동일한 작업을 수행할 수 있습니다. grep파일과 관련이 있습니다.

웹 트래픽의 경우 거의 항상 매개변수를 사용하려고 합니다. -W문자열 형식과 옵션을 유지하려면 -큐, 일치하지 않는 패킷에 대한 중복 정보를 숨깁니다. 다음은 GET 또는 POST 명령으로 모든 패킷을 가로채는 예제 명령입니다.

Ngrep -q -W 바이라인 "^(GET|POST) .*"
예를 들어 특정 호스트, IP 주소 또는 포트를 기준으로 패킷에 대한 추가 필터를 추가할 수 있습니다. 다음은 'search'라는 단어가 포함된 google.com, 포트 80을 오가는 모든 트래픽에 대한 필터입니다.

Ngrep -q -W 바이라인 "검색" 호스트 www.google.com 및 포트 80