목차
1. cURL 소개
2.cURL 함수 라이브러리
  GET 요청 과정은 cURL의 일반적인 과정입니다.
POST 요청은 두 가지 옵션을 설정해야 합니다:
 cURL 파일 업로드 아이디어는 파일 경로 앞에 "@" 기호를 추가하고 업로드 요청 필드에 설치하는 것입니다. 백그라운드는 $_FILES를 통해 업로드된 파일 정보를 얻을 수 있습니다. 그러나 PHP5.6 이후에는 "@" 기호가 폐지되고 CURLFile 클래스를 사용하여 업로드를 구현할 수 있습니다.
 cURL을 사용하여 파일을 다운로드하는 한 가지 아이디어는 cURL 옵션 CURLOPT_FILE을 파일 포인터로 설정하여 요청된 리소스 파일을 파일 스트림과 연결하는 것입니다. 이 파일 스트림은 일반적으로 fopen() 반환입니다. 함수의 가치. 파일 스트림을 사용하여 원격 파일을 로컬로 작성하면 대용량 파일을 작성(다운로드)할 때 발생할 수 있는 메모리 오류를 방지할 수 있습니다.
 cURL에는 일괄 처리 핸들이 있습니다. 이는 여러 cURL 핸들을 열고 이러한 핸들을 일괄 핸들에 바인딩한 다음 루프에서 순서대로 각 cURL 연결을 처리하여 달성할 수 있습니다. , "멀티스레딩"과 유사합니다.
백엔드 개발 PHP 튜토리얼 PHP에서 file_get_contents()보다 나은 cURL 예제에 대한 자세한 설명

PHP에서 file_get_contents()보다 나은 cURL 예제에 대한 자세한 설명

Sep 11, 2017 am 09:32 AM
curl file

PHP는 file_get_content() 함수를 사용하여 웹 페이지 콘텐츠를 캡처할 수 있지만 파일 업로드 또는 다운로드, 쿠키 작업 등과 같은 더 복잡한 처리를 수행할 수는 없습니다. PHP의 cURL은 이러한 기능을 제공합니다.

1. cURL 소개

 cURL은 PHP용 확장 라이브러리입니다. 다양한 유형의 서버와 다양한 유형의 프로토콜을 사용하여 연결하고 통신할 수 있습니다.

 현재 http, https, ftp, gopher, telnet, dict, 파일 및 ldap 프로토콜을 지원하며 HTTPS 인증, HTTP POST, FTP 업로드, 프록시, 쿠키 및 사용자 이름 + 비밀번호 인증 등도 지원합니다.

2.cURL 함수 라이브러리

자주 사용하는 함수

Function Description
컬_init() cURL 세션 초기화
컬_setopt() cURL 옵션 설정
컬_exec()
cURL 세션 실행
컬_getinfo() 현재 세션 정보 가져오기
컬_errno() 마지막 오류 코드 반환
curl_error() 다음으로 돌아가기 current 세션의 마지막 오류 문자열
컬_close() cURL 세션 닫기


기타 기능

Function Description
curl_co handler() cURL 복사 핸들과 모든 옵션이 있습니다.
curl_escape() 주어진 문자열을 인코딩하는 URL, 이스케이프된 문자열을 반환합니다.
curl_file_create() CURLFile 객체를 생성합니다.
curl_multi_add_handle() cURL 일괄 세션에 개별 컬 핸들을 추가합니다.
curl_multi_close() cURL 핸들 그룹을 닫습니다.
curl_multi_exec() 현재 cURL 핸들의 하위 연결을 실행합니다.
curl_multi_getcontent() CURLOPT_RETURNTRANSFER가 설정된 경우 가져온 출력의 텍스트 스트림을 반환합니다.
curl_multi_info_read() 현재 구문 분석된 cURL의 관련 전송 정보를 가져옵니다.
curl_multi_init() 새 cURL 배치 핸들을 반환합니다.
curl_multi_remove_handle() cURL 일괄 처리 리소스에서 핸들 리소스를 제거합니다.
curl_multi_select() cURL 배치에서 모든 활성 연결을 기다립니다.
curl_multi_setopt() 일괄 cURL 전송 옵션을 설정합니다.
curl_multi_strerror() 오류 코드를 설명하는 문자열 텍스트를 반환합니다.
curl_pause() 연결을 일시 중지했다가 다시 시작하세요.
curl_reset() libcurl 세션 핸들의 모든 옵션을 재설정합니다.
curl_setopt_array() cURL 전송 세션에 대한 옵션을 대량으로 설정합니다.
curl_share_close() cURL 공유 핸들을 닫습니다.
curl_share_init() cURL 공유 핸들을 초기화합니다.
curl_share_setopt() 공유 핸들에 대한 cURL 전송 옵션을 설정합니다.
curl_strerror() 오류 코드에 대한 문자열 설명을 반환합니다.
curl_unescape() URL로 인코딩된 문자열을 디코딩합니다.
curl_version() cURL 버전 정보를 가져옵니다.


3. 구현 과정

1. cURL 세션 초기화

3. cURL 세션 실행

4. cURL 정보 및/또는 오류 정보 가져오기

5. cURL 핸들

여기서 가장 복잡한 부분은 2단계입니다. cURL에 대한 많은 설정 옵션이 있습니다. 아래 예를 통해 이에 대해 알아 보겠습니다.


IV. 예시 1: GET 요청

  GET 요청 과정은 cURL의 일반적인 과정입니다.

로컬 서버 localserver.com의 루트 디렉터리에 다음 내용을 포함하는 테스트 스크립트 index.php를 준비합니다.

<?php
    $url = &#39;http://www.baidu.com&#39;;
    // 初始化,获得一个cURL句柄
    $ch = curl_init();
    
    // 设置选项
    curl_setopt($ch, CURLOPT_URL, $url); // 请求URL
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回数据流,而不直接输出
    curl_setopt($ch, CURLOPT_HEADER, 0); // 无需响应的header头
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); //连接超时,秒为单位

    // 执行并获取返回内容
    $output = curl_exec($ch);
    if($output === false){
        $output = &#39;cURL error: &#39; . curl_error($ch);
    }
    // 释放 cURL 句柄资源
    curl_close($ch);

    print_r($output);
?>
로그인 후 복사

브라우저는 로컬 서버 홈페이지 localserver.com/index.php에 액세스하여 Baidu 홈페이지를 표시합니다.

5. 예제 2. POST 요청

POST 요청은 두 가지 옵션을 설정해야 합니다:

curl_setopt($ch, CURLOPT_POST, 1); // 表明POST请求
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData)); // POST提交数据
로그인 후 복사

먼저 원격 서버인 Remoteserver.com의 루트 디렉터리에서 수신할 index.php 스크립트를 다음 내용으로 준비합니다.

<?php
    $input = file_get_contents(&#39;php://input&#39;);
    echo $input;
?>
로그인 후 복사

그런 다음 로컬 서버 localserver.com의 루트 디렉터리에서 POST 요청에 사용되는 index.php 스크립트를 작성합니다. 내용은 다음과 같습니다.

<?php
    $url = &#39;http://remoteserver.com/index.php&#39;;
    $data = array(
        &#39;fname&#39;=> &#39;Daniel&#39;,
        &#39;lname&#39; => &#39;Stenberg&#39;
    );

     // 初始化
    $ch = curl_init();
    
    // 设置选项
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
    curl_setopt($ch, CURLOPT_POST, 1); // POST请求
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); //POST数据。用http_build_query()转换为“&”拼接的字符串

    // 执行并获取返回内容
    $output = curl_exec($ch);
    if($output === false){
        $output =  &#39;cURL error: &#39; . curl_error($ch);
    }

    // 释放 cURL 句柄资源
    curl_close($ch);

    print_r($output);
?>
로그인 후 복사

브라우저가 localserver.com/index.php에 액세스하면 표시는 다음과 같습니다:

fname=Daniel&lname=Stenberg
로그인 후 복사

6. 예시 3. 파일 업로드

 cURL 파일 업로드 아이디어는 파일 경로 앞에 "@" 기호를 추가하고 업로드 요청 필드에 설치하는 것입니다. 백그라운드는 $_FILES를 통해 업로드된 파일 정보를 얻을 수 있습니다. 그러나 PHP5.6 이후에는 "@" 기호가 폐지되고 CURLFile 클래스를 사용하여 업로드를 구현할 수 있습니다.

 먼저 원격 서버 Remoteserver.com의 루트 디렉터리에 수신 스크립트 index.php를 준비합니다. 내용은 다음과 같습니다.

<?php
    $action = $_POST[&#39;action&#39;];
    if($action == &#39;uploadImage&#39;){
        $name = $_FILES[&#39;file&#39;][&#39;name&#39;];
        $tmpname = $_FILES[&#39;file&#39;][&#39;tmp_name&#39;];
        
        // 保存到当前脚本所在目录
        move_uploaded_file($tmpname, dirname(__FILE__).&#39;/&#39;.$name);

        $error = $_FILES[&#39;file&#39;][&#39;error&#39;];
        switch ($error) {
            case 0: echo &#39;上传成功&#39;; break;
            case 1: echo &#39;文件大小超出 php.ini 限制&#39;; break;
            case 2: echo &#39;文件大小超出 表单 MAX_FILE_SIZE 限制&#39;; break;
            case 3: echo &#39;文件部分被上传&#39;; break;
            case 4: echo &#39;没有文件被上传&#39;; break;
            case 6: echo &#39;找不到临时文件夹&#39;; break;
            case 7: echo &#39;文件写入失败&#39;; break;
            default: $output = &#39;未知错误&#39;;
        }
    }
?>
로그인 후 복사

   그런 다음 로컬 서버의 루트 디렉터리에 이미지 파일 test.jpg와 cURL 업로드 스크립트 인덱스를 준비합니다. localserver.com.php, 스크립트 내용은 다음과 같습니다.

<?php
    $url = &#39;http://remoteserver.com/index.php&#39;;
    $file = realpath(getcwd() . &#39;/test.jpg&#39;);
    $data = array(
        &#39;action&#39; => &#39;uploadImage&#39;,
        &#39;file&#39; => &#39;@&#39; . $file
    );
    if(version_compare(PHP_VERSION, &#39;5.6.0&#39;) > 0){
        $data[&#39;file&#39;] = new CURLFile($file);
    }
    
    // 初始化
    $ch = curl_init();
    
    // 设置选项
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

    // 执行并获取返回内容
    $output = curl_exec($ch);
    if($output === false){
        $output =  &#39;cURL error: &#39; . curl_error($ch);
    }

    // 释放 cURL 句柄资源
    curl_close($ch);

    print_r($output);
?>
로그인 후 복사

  브라우저가 localserver.com/index.php에 액세스하고 표시 내용은 다음과 같습니다.

上传成功
로그인 후 복사

  원격 서버의 루트 디렉터리를 확인하여 방금 올라온 추가 사진.

VII. 예 4. 파일 다운로드

 cURL을 사용하여 파일을 다운로드하는 한 가지 아이디어는 cURL 옵션 CURLOPT_FILE을 파일 포인터로 설정하여 요청된 리소스 파일을 파일 스트림과 연결하는 것입니다. 이 파일 스트림은 일반적으로 fopen() 반환입니다. 함수의 가치. 파일 스트림을 사용하여 원격 파일을 로컬로 작성하면 대용량 파일을 작성(다운로드)할 때 발생할 수 있는 메모리 오류를 방지할 수 있습니다.

 로컬 서버 localserver.com의 루트 디렉토리에 테스트 스크립트 index.php를 작성합니다. 내용은 다음과 같습니다.

<?php
    $url = &#39;http://remoteserver.com/test.jpg&#39;;
    $file = &#39;./test.jpg&#39;;
    $fp = fopen($file, &#39;w&#39;);

    // 初始化
    $ch = curl_init();

    // 设置选项
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
    curl_setopt($ch, CURLOPT_FILE, $fp); // 用于传输的文件流,默认是STDOUT

    // 执行并获取返回内容
    $output = curl_exec($ch);
    if($output === false){
        $output =  &#39;cURL error: &#39; . curl_error($ch);
    }

    // 获取已下载大小
    $size_download = curl_getinfo($ch, CURLINFO_SIZE_DOWNLOAD);

    // 释放资源
    fclose($fp);
    curl_close($ch); 

    if ($size_download && $size_download == filesize($file)) {
        echo "下载成功";
    } else {
        echo "下载失败或不完整";
    }   
?>
로그인 후 복사

 브라우저에서 localserver.com/index.php에 액세스하면 다음과 같이 표시됩니다.

下载成功
로그인 후 복사

로컬 서버의 루트 디렉터리를 살펴보고 원격 사진이 다운로드되었는지 확인하세요.

8. 예시 5. 일괄 처리

 cURL에는 일괄 처리 핸들이 있습니다. 이는 여러 cURL 핸들을 열고 이러한 핸들을 일괄 핸들에 바인딩한 다음 루프에서 순서대로 각 cURL 연결을 처리하여 달성할 수 있습니다. , "멀티스레딩"과 유사합니다.

  로컬 서버 localserver.com의 루트 디렉터리에 index.php를 작성합니다. 내용은 다음과 같습니다.

<?php
    $urls = array(
        &#39;http://www.baidu.com&#39;,
        &#39;http://www.qidian.com&#39;
    );
    $count = count($urls);
    $ch = array();

    // 创建批处理cURL句柄
    $mh = curl_multi_init();

    // 初始化每个cURL,并设置选项,绑定给批处理句柄
    for ($i = 0; $i < $count; $i++) {
        $ch[$i] = curl_init();
        curl_setopt($ch[$i], CURLOPT_URL, $urls[$i]);
        curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch[$i], CURLOPT_HEADER, 0);
        curl_setopt($ch[$i], CURLOPT_CONNECTTIMEOUT, 30);
        curl_multi_add_handle($mh, $ch[$i]);
    }

    // 执行批处理
    $running = null;
    do {
        usleep(10000); // 延迟0.01秒,单位为百万分之一秒
        curl_multi_exec($mh, $running); // 异步实现批处理,类似“多线程”
    } while($running > 0);

    // 获取每个cURL的响应
    $res = array();
    for ($i = 0; $i < $count; $i++) {
        $res[$i] = curl_multi_getcontent($ch[$i]);
    }

    // 关闭全部句柄
    for ($i = 0; $i < $count; $i++) {
        curl_multi_remove_handle($mh, $ch[$i]);
    }
    curl_multi_close($mh);

    print_r($res);
?>
로그인 후 복사

  브라우저에서 localserver.com/index.php에 접속하여 "연결된" Baidu 홈페이지와 Qidian을 표시합니다. .com 홈페이지.

위 내용은 PHP에서 file_get_contents()보다 나은 cURL 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Python에서 CURL과 Python 요청 간의 상호 변환을 실현하는 방법 Python에서 CURL과 Python 요청 간의 상호 변환을 실현하는 방법 May 03, 2023 pm 12:49 PM

컬과 Pythonrequests는 모두 HTTP 요청을 보내는 강력한 도구입니다. 컬은 터미널에서 직접 요청을 보낼 수 있는 명령줄 도구인 반면, Python의 요청 라이브러리는 Python 코드에서 요청을 보내는 보다 프로그래밍적인 방법을 제공합니다. 컬을 Pythonrequestscurl 명령으로 변환하는 기본 구문은 다음과 같습니다. 컬[OPTIONS]URL 컬 명령을 Python 요청으로 변환할 때 옵션과 URL을 Python 코드로 변환해야 합니다. 다음은 컬POST 명령의 예입니다: 컬-XPOST https://example.com/api

Java의 File.length() 함수를 사용하여 파일 크기를 가져옵니다. Java의 File.length() 함수를 사용하여 파일 크기를 가져옵니다. Jul 24, 2023 am 08:36 AM

파일 크기를 얻으려면 Java의 File.length() 함수를 사용하십시오. 파일 크기는 파일 작업을 처리할 때 매우 일반적인 요구 사항입니다. Java는 파일 크기를 얻는 매우 편리한 방법, 즉 길이( ) File 클래스의 메서드입니다. 이 기사에서는 이 방법을 사용하여 파일 크기를 가져오는 방법을 소개하고 해당 코드 예제를 제공합니다. 먼저, 크기를 구하려는 파일을 나타내는 File 객체를 만들어야 합니다. File 객체를 생성하는 방법은 다음과 같습니다: Filef

PHP Blob을 파일로 변환하는 방법 PHP Blob을 파일로 변환하는 방법 Mar 16, 2023 am 10:47 AM

PHP Blob을 파일로 변환하는 방법: 1. PHP 샘플 파일을 생성합니다. 2. "function blobToFile(blob) {return new File([blob], 'screenshot.png', { type: 'image/jpeg' })를 통해 } ” 메소드를 사용하여 Blob을 파일로 변환할 수 있습니다.

Hongmeng 네이티브 애플리케이션 무작위 시 Hongmeng 네이티브 애플리케이션 무작위 시 Feb 19, 2024 pm 01:36 PM

오픈 소스에 대해 자세히 알아보려면 다음을 방문하세요. 51CTO Hongmeng 개발자 커뮤니티 https://ost.51cto.com 실행 환경 DAYU200:4.0.10.16SDK: 4.0.10.15IDE: 4.0.600 1. 애플리케이션을 생성하려면 파일을 클릭합니다. >새파일->CreateProgect. 템플릿 선택: [OpenHarmony]EmptyAbility: 프로젝트 이름 shici, 애플리케이션 패키지 이름 com.nut.shici 및 애플리케이션 저장 위치 XXX(한자, 특수 문자, 공백 없음)를 입력합니다. CompileSDK10, 모델: 스테이지. 장치

Linux에서 컬 버전을 업데이트하는 방법에 대한 튜토리얼입니다! Linux에서 컬 버전을 업데이트하는 방법에 대한 튜토리얼입니다! Mar 07, 2024 am 08:30 AM

Linux에서 컬 버전을 업데이트하려면 다음 단계를 따르세요. 현재 컬 버전을 확인하세요. 먼저 현재 시스템에 설치된 컬 버전을 확인해야 합니다. 터미널을 열고 다음 명령을 실행합니다. 컬 --version 이 명령은 현재 컬 버전 정보를 표시합니다. 사용 가능한 컬 버전 확인: 컬을 업데이트하기 전에 사용 가능한 최신 버전을 확인해야 합니다. 최신 버전의 컬을 찾으려면 컬의 공식 웹사이트(curl.haxx.se)나 관련 소프트웨어 소스를 방문하세요. 컬 소스 코드 다운로드: 컬 또는 브라우저를 사용하여 선택한 컬 버전의 소스 코드 파일(일반적으로 .tar.gz 또는 .tar.bz2)을 다운로드합니다.

처음부터 끝까지: PHP 확장 cURL을 사용하여 HTTP 요청을 만드는 방법 처음부터 끝까지: PHP 확장 cURL을 사용하여 HTTP 요청을 만드는 방법 Jul 29, 2023 pm 05:07 PM

처음부터 끝까지: HTTP 요청에 PHP 확장 cURL을 사용하는 방법 소개: 웹 개발에서는 종종 타사 API 또는 기타 원격 서버와 통신해야 합니다. cURL을 사용하여 HTTP 요청을 하는 것은 일반적이고 강력한 방법입니다. 이 기사에서는 PHP를 사용하여 cURL을 확장하여 HTTP 요청을 수행하는 방법을 소개하고 몇 가지 실용적인 코드 예제를 제공합니다. 1. 준비 먼저 php에 cURL 확장이 설치되어 있는지 확인하세요. 명령줄에서 php-m|grepcurl을 실행하여 확인할 수 있습니다.

PHP8.1 출시: 여러 요청을 동시에 처리하기 위한 컬(curl) 도입 PHP8.1 출시: 여러 요청을 동시에 처리하기 위한 컬(curl) 도입 Jul 08, 2023 pm 09:13 PM

PHP8.1 출시: 여러 요청의 동시 처리를 위한 컬 소개 최근 PHP는 여러 요청의 동시 처리를 위한 컬이라는 중요한 기능을 도입한 최신 버전의 PHP8.1을 공식 출시했습니다. 이 새로운 기능은 개발자에게 여러 HTTP 요청을 처리하는 보다 효율적이고 유연한 방법을 제공하여 성능과 사용자 경험을 크게 향상시킵니다. 이전 버전에서는 여러 요청을 처리하려면 여러 컬 리소스를 만들고 루프를 사용하여 각각 데이터를 보내고 받아야 하는 경우가 많았습니다. 이 방법으로 목적을 달성할 수는 있지만

Java의 File.renameTo() 함수를 사용하여 파일 이름 바꾸기 Java의 File.renameTo() 함수를 사용하여 파일 이름 바꾸기 Jul 25, 2023 pm 03:45 PM

Java의 File.renameTo() 함수를 사용하여 파일 이름을 바꿉니다. Java 프로그래밍에서는 파일 이름을 바꿔야 하는 경우가 많습니다. Java는 파일 작업을 처리하기 위해 File 클래스를 제공하며 renameTo() 함수는 파일 이름을 쉽게 바꿀 수 있습니다. 이 기사에서는 Java의 File.renameTo() 함수를 사용하여 파일 이름을 바꾸는 방법을 소개하고 해당 코드 예제를 제공합니다. File.renameTo() 함수는 File 클래스의 메서드입니다.

See all articles