PHP 시 뮬 레이 션 POST 요청 의 curl 기본 사용

8225 단어 phppost컬.
cURL 의 기본 사용 절차
먼저 c URL 을 소개 하 겠 습 니 다.
cURL 은 HTTP 헤더 정보 에 따라 브 라 우 저 전송 데 이 터 를 모 의 합 니 다.FTP,FTPS,HTTP,HTTPS,DICT,FILE 등 프로 토 콜 을 지원 합 니 다.HTTPS 인증,HTTPPOST 방법,HTTPPUT 방법,FTP 업로드,HTTP 업로드,프 록 시 서버,cookies,사용자 이름/비밀번호 인증 등 기능 이 있 습 니 다.c URL 은 웹 페이지,POST 데이터 등 을 캡 처 하 는 기능 을 실현 하 는 이기 라 고 할 수 있다.
cURL 함 수 를 사용 하 는 것 은 주로 네 부분 으로 나 뉜 다.
1.c URL 을 초기 화 합 니 다.
2.cURL 변 수 를 설정 합 니 다.이것 은 cRUL 의 핵심 이 고 확장 기능 은 모두 이 단계 에 달 려 있 습 니 다.
3.cURL 을 실행 하여 결 과 를 가 져 옵 니 다.
4.연결 을 닫 고 자원 을 회수 합 니 다.

$ch = curl_init();//1

curl_setopt($ch, CURLOPT_URL, "http://localhost");//2

$output = curl_exec($ch);//3

curl_close($ch);//4
또한,우 리 는 curl 도 사용 할 수 있다.getinfo($ch)함수 가 curl 에서 실 행 된 정 보 를 가 져 옵 니 다.그 결 과 는 배열 입 니 다.
$info 배열 의 내용 은 다음 과 같은 내용 을 포함 합 니 다.
  • "url"/자원 네트워크 주소
  • “content_type"//내용 인 코딩
  • “http_code"//HTTP 상태 코드
  • "filetime"//파일 생 성 시간
  • “total_time"//총 소모 시간
  • “size_업로드"//업로드 데이터 의 크기
  • “size_download"//다운로드 데이터 의 크기
  • “speed_다운로드 속도
  • “speed_업로드 속도
  • “download_content_length"//다운로드 내용 의 길이
  • “upload_content_length"//업로드 내용 의 길이
  • cURL 의 일반적인 설정
    다음은 curl 이 두 번 째 단 계 를 사용 할 때 자주 사용 하 는 변수 설정 을 상세 하 게 소개 합 니 다.curl 함 수 를 사용 할 때 다양한 수요 에 따라 설정 할 수 있 습 니 다.
    기본 정보 설정:
    curl_setopt($ch,CURLOPT_URL,$string);//curl 디 렉 터 리 주소 설정
    curl_setopt($ch,CURLOPT_PORT,$port);//연결 포트 를 설정 합 니 다.기본 값 80 은 설정 하지 않 습 니 다.
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//결과 흐름 을 되 돌려 줍 니 다.출력 이 후속 처 리 를 기다 리 는 것 이 아니 라 이 항목 을 설정 합 니 다.나중에 캡 처 한 정 보 를 직접 출력 하 는 것 이 아 닙 니 다.
    POST 데이터 정보 설정:
    curl_setopt($ch,CURLOPT_POST,1);//POST 로 전송 데이터 설정
    curl_setopt($ch,CURLOPT_POSTFIELDS,$string);//전송 할 데이터 설정
    인증 정보 설정:
    curl_setopt($ch,CURLOPT_COOKIE,$string);//curl 실행 시 가지 고 있 는 쿠키 정보 설정
    curl_setopt($ch,CURLOPT_USERAGENT,$string);//curl 시 뮬 레이 션 브 라 우 저 정보 설정
    curl_setopt($ch,CURLOPT_REFERER,$string);//헤더 에 있 는 referer 를 설정 하면 도 난 방지 체인 을 풀 수 있 습 니 다.
    curl_setopt($ch,CURLOPT_USERPWD,$string);//연결 에 필요 한 사용자 이름과 비밀 번 호 를 전달 합 니 다.형식 은"[username]:[password]"입 니 다.
    curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);//서버 방향 변경 허용 설정
    강화 정보 설정:
    curl_setopt($ch,CURLOPT_NOBODY,1);//HTML 바디 출력 을 허용 하지 않 습 니 다.페이지 제목 등 정 보 를 캡 처 할 때 이 설정 을 사용 하면 속도 가 크게 빨 라 집 니 다.
    curl_setopt($ch,CURLOPT_TIMEOUT,$int);//실행 가능 한 최 장 초(시간 초과)를 설정 합 니 다.설정 수치 가 작 을 때 CURL 은 실행 시간 이 긴 페이지 를 포기 합 니 다.
    curl_setopt($ch,CURLOPT_HEADER,1);//대상 을 읽 을 때 발생 하 는 헤더 파일 을 출력 흐름 에 포함 시 킬 수 있 도록 설정 합 니 다.
    cURL 일괄 처리 기능 의 기본 사용
    물론 cURL 의 기능 은 여기에 그 치지 않 습 니 다.매 뉴 얼 에서 더 많은 변수 설정 을 찾 을 수 있 습 니 다.그리고 cURL 의 가장 강력 한 부분 은 일괄 처리 기능 입 니 다.
    cURL 의 일괄 처리 도 이해 하기 쉬 운 것 같 습 니 다.다음은 일반적인 절차 입 니 다.
    1.$mh=curl_multi_init();//일괄 처리 핸들 을 초기 화 합 니 다.
    2.curl_multi_add_handle($mh,$ch);//일괄 처리 핸들 에 설 정 된$ch 핸들 을 추가 합 니 다.
    3.curl_multi_exec($mh,$running);//$mh 핸들 을 실행 하고$mh 핸들 의 실행 상 태 를$running 변수 에 기록 합 니 다.
    4.$running 이 true 일 때 curl 반복 실행multi_close()함수
    5.순환 이 끝 난 후$mh 핸들 을 옮 겨 다 니 며 curlmulti_getcontent()첫 번 째 핸들 의 반환 값 가 져 오기
    6.curl 로multi_remove_handle()에서$mh 의 핸들 을 제거 합 니 다.
    7.curl 로multi_close()$mh 일괄 처리 핸들 을 닫 습 니 다.
    코드 는 다음 과 같 습 니 다:
    
    <?php 
    
            $chArr=[];
    
            for($i=0;$i<50;$i++){
    
                  $chArr[$i]=curl_init("http://www.baidu.com");
    
                  curl_setopt($chArr[$i],CURLOPT_RETURNTRANSFER,1);
    
            }
    
           $mh = curl_multi_init(); //1
    
           foreach($chArr as $k => $ch){      
    
             curl_multi_add_handle($mh,$ch); //2
        
        }
    
           $running = null; 
    
           do{ 
    
               curl_multi_exec($mh,$running); //3
    
            }while($running > 0); //4
    
            foreach($chArr as $k => $ch){ 
    
                  $result[$k]= curl_multi_getcontent($ch); //5
    
                  curl_multi_remove_handle($mh,$ch);//6
    
            }
    
            curl_multi_close($mh); //7
    
          ?>
    질문
    그러나 대량의 핸들 을 실행 할 때 우 리 는 매우 심각 한 문 제 를 발견 할 수 있다.그것 은 실행 할 때 시스템 CPU 의 점용 률 이 거의 100%이 고 거의 다운 상태 이다.그 이 유 는$running>0 에서 curl 을 수행 하기 때 문 입 니 다.multi_exec($mh,$running)전체 일괄 처리 핸들 이 모두 실행 되 지 않 았 을 때 시스템 은 curl 을 계속 실행 합 니 다.multi_exec()함수.우 리 는 실험 으로 증명 한다.
    우 리 는 순환 중 curlmulti_exec($mh,$running)문장 앞 에 echo"a"를 추가 합 니 다.라 는 문구 가 적 혀 있다.우리 의 목적 은 바 이 두 에 대한 50 차례 의 방문 을 실행 한 후에 결 과 를 보 는 것 이다.

    그림 에서 스크롤 바 의 크기(스크롤 바 가 최소 상태)를 보면 출력 a 의 개 수 를 대충 볼 수 있 고 500 개 도 그 치지 않 기 때문에 우 리 는 CPU 를 차지 하 는 원인 을 찾 을 수 있 습 니 다.
    cURL 일괄 처리 시 메모리 최적화 방안
    변경 하 는 방식 은 curl 함수 라 이브 러 리 의 curl 을 응용 하 는 것 입 니 다.multi_select()함수,그 함수 원형 은 다음 과 같 습 니 다.
    intcurl_multi_select(resource$mh[,float$timeout=1.0])
    cURL 일괄 처리 연결 에 활성 연결 이 있 을 때 까지 차단 합 니 다.성공 시 설명자 집합 에서 설명자 의 수 를 되 돌려 줍 니 다.실패 할 때 select 가 실 패 했 을 때-1 을 되 돌려 줍 니 다.그렇지 않 으 면 시간 초과(바 텀 selection 시스템 에서 호출)를 되 돌려 줍 니 다.
    저 는 여러분 curlmulti_select()함 수 는 읽 을 프로그램 이 없 으 면 막 히 는 목적 을 달성 합 니 다.
    우 리 는 일괄 처리 의 3,4 단계 에 대해 최적화 시 키 고 다 중 스 레 드 를 이용 하여 병행 절 차 를 모 의 한다.
    많은 친구 들 이 매 뉴 얼 에 제 공 된 코드 에 대해 의문 을 가지 고 있 습 니 다.
    
    $running = null;
    
    do {
    
        $mrc = curl_multi_exec($mh, $running);
    
    } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    
    //         $mh     $ch  ,  $mh          $running,      CURLM_CALL_MULTI_PERFORM ,            ,    ,    $ch             ,     CURLM_OK,      ,          。
    
    //$running true, $mh       $ch      ,$mrc==CURLM_OK,    $ch              。
    
    while ($running && $mrc == CURLM_OK) { 
    
        if (curl_multi_select($mh) != -1) {//$mh          $ch  ,curl_multi_select($mh) != -1        。
    
            do {                            //         $ch  。
    
                 $mrc = curl_multi_exec($mh, $running);
    
            } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    
        }
    
    }
    이렇게 실행 하면$mh 일괄 처리 중$ch 핸들 이 데 이 터 를 읽 거나 기록 한 후($mrc==CURLMOK),curl 입장multi_select($mh)의 차단 단 계 는 전체$mh 일괄 처리 가 실 행 될 때 curl 을 계속 실행 하지 않 습 니 다.multi_exec,CPU 자원 낭비.
    cURL 일괄 처리 메모리 최적화 결과
    전체 코드 는 다음 과 같 습 니 다:
    
    <?php 
    
            $chArr=[];
    
            for($i=0;$i<50;$i++){
    
            $chArr[$i]=curl_init("http://www.baidu.com");
    
            curl_setopt($chArr[$i],CURLOPT_RETURNTRANSFER,1);
    
            }
    
           $mh = curl_multi_init(); 
    
            foreach($chArr as $k => $ch)      
    
            curl_multi_add_handle($mh,$ch); 
            $running = null; 
    
            do {
            $mrc = curl_multi_exec($mh, $running);
    
         } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    
    
        while ($running && $mrc == CURLM_OK) {
    
             if (curl_multi_select($mh) != -1) {
    
                 do {
    
                      $mrc = curl_multi_exec($mh, $running);
    
                 } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    
             }
    
        }
    
           foreach($chArr as $k => $ch){ 
    
                   $result[$k]= curl_multi_getcontent($ch); 
    
                   curl_multi_remove_handle($mh,$ch);
    
           }
    
            curl_multi_close($mh); 
    
          ?>
    우 리 는 다시$mrc=curlmulti_exec($mh,$running)문장 앞 에 echo"a"를 추가 합 니 다.결 과 는 다음 그림 과 같다.

    50 회 에 그 치지 않 았 지만 최적화 되 지 않 기 전보 다 CPU 사용률 이 크게 달 라 졌 다.
    curl 함수 가 매우 강하 지만 우 리 는 다른 함 수 를 사용 하여 POST 요청 을 보 낼 기회 가 있 습 니 다.또한 더 밑 에서 curl 함 수 를 이해 할 수 있 기 때문에 본 집 은 다른 함수 에 도 많은 폭 을 사용 합 니 다.
    이상 은 PHP 시 뮬 레이 션 으로 POST 요청 을 보 내 는 curl 의 기본 사용 에 대한 상세 한 내용 입 니 다.더 많은 PHP 시 뮬 레이 션 으로 POST 요청 을 보 내 는 curl 의 기본 사용 에 관 한 자 료 는 다른 관련 글 을 주목 하 시기 바 랍 니 다!

    좋은 웹페이지 즐겨찾기