복붙노트

PHP curl로 HTTP 기본 인증을 사용하여 요청하는 방법은 무엇입니까?

PHP

PHP curl로 HTTP 기본 인증을 사용하여 요청하는 방법은 무엇입니까?

PHP에서 REST 웹 서비스 클라이언트를 구축하고 있으며 현재 서비스 요청을하기 위해 컬을 사용하고 있습니다.

컬 (curl)을 사용하여 인증 된 (http 기본) 요청을 만드는 방법은 무엇입니까? 헤더를 직접 추가해야합니까?

해결법

  1. ==============================

    1.너는 이것을 원한다 :

    너는 이것을 원한다 :

    curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password);  
    

    Zend에는 REST 클라이언트와 zend_http_client가 있으며 PEAR에는 일종의 래퍼가 있습니다. 그러나 당신 자신만으로는 충분합니다.

    따라서 전체 요청은 다음과 같이 보일 수 있습니다.

    $process = curl_init($host);
    curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type: application/xml', $additionalHeaders));
    curl_setopt($process, CURLOPT_HEADER, 1);
    curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password);
    curl_setopt($process, CURLOPT_TIMEOUT, 30);
    curl_setopt($process, CURLOPT_POST, 1);
    curl_setopt($process, CURLOPT_POSTFIELDS, $payloadName);
    curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
    $return = curl_exec($process);
    curl_close($process);
    
  2. ==============================

    2.CURLOPT_USERPWD는 기본적으로 다음과 같이 http 헤더가있는 사용자의 password64 문자열을 base64로 보냅니다.

    CURLOPT_USERPWD는 기본적으로 다음과 같이 http 헤더가있는 사용자의 password64 문자열을 base64로 보냅니다.

    Authorization: Basic dXNlcjpwYXNzd29yZA==
    

    그래서 CURLOPT_USERPWD와는 별도로 다른 헤더와 함께 HTTP-Request 헤더 옵션을 사용할 수도 있습니다.

    $headers = array(
        'Content-Type:application/json',
        'Authorization: Basic '. base64_encode("user:password") // <---
    );
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    
  3. ==============================

    3.CURL을 직접 사용하는 가장 간단하고 고유 한 방식입니다.

    CURL을 직접 사용하는 가장 간단하고 고유 한 방식입니다.

    이것은 나를 위해 작동합니다 :

    <?php
    $login = 'login';
    $password = 'password';
    $url = 'http://your.url';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($ch, CURLOPT_USERPWD, "$login:$password");
    $result = curl_exec($ch);
    curl_close($ch);  
    echo($result);
    
  4. ==============================

    4.SOAP과 달리 REST는 표준화 된 프로토콜이 아니므로 "REST 클라이언트"를 갖는 것은 약간 어렵습니다. 그러나 대부분의 RESTful 서비스는 기본 프로토콜로 HTTP를 사용하므로 모든 HTTP 라이브러리를 사용할 수 있어야합니다. cURL 외에도 PHP에는 PEAR을 통해 다음과 같은 기능이 있습니다.

    SOAP과 달리 REST는 표준화 된 프로토콜이 아니므로 "REST 클라이언트"를 갖는 것은 약간 어렵습니다. 그러나 대부분의 RESTful 서비스는 기본 프로토콜로 HTTP를 사용하므로 모든 HTTP 라이브러리를 사용할 수 있어야합니다. cURL 외에도 PHP에는 PEAR을 통해 다음과 같은 기능이 있습니다.

    HTTP_Request2

    대체 된

    HTTP_Request

    HTTP Basic Auth 수행 방법에 대한 샘플

    // This will set credentials for basic auth
    $request = new HTTP_Request2('http://user:password@www.example.com/secret/');
    

    Digest Auth도 지원합니다.

    // This will set credentials for Digest auth
    $request->setAuth('user', 'password', HTTP_Request2::AUTH_DIGEST);
    
  5. ==============================

    5.Yahoo는 PHP를 사용하여 REST 서비스를 호출하는 방법에 대한 자습서를 제공합니다.

    Yahoo는 PHP를 사용하여 REST 서비스를 호출하는 방법에 대한 자습서를 제공합니다.

    Make Yahoo! PHP로 웹 서비스 REST 호출

    나는 그것을 사용하지 않았지만 야후는 ​​야후이며 적어도 어느 정도 수준의 품질을 보장해야한다. 그들은 PUT 및 DELETE 요청을 처리하는 것 같지 않습니다.

    또한 curl_exec () 및 기타 사용자 기여 노트에는 많은 좋은 정보가 들어 있습니다.

  6. ==============================

    6.Michael Dowling의 매우 적극적으로 유지되는 Guzzle이 좋은 방법입니다. 우아한 인터페이스, 비동기 호출 및 PSR 준수 외에도 REST 호출에 대한 인증 헤더가 간단 해집니다.

    Michael Dowling의 매우 적극적으로 유지되는 Guzzle이 좋은 방법입니다. 우아한 인터페이스, 비동기 호출 및 PSR 준수 외에도 REST 호출에 대한 인증 헤더가 간단 해집니다.

    // Create a client with a base URL
    $client = new GuzzleHttp\Client(['base_url' => 'http://myservices.io']);
    
    // Send a request to http://myservices.io/status with basic authentication
    $response = $client->get('/status', ['auth' => ['username', 'password']]);
    

    문서를 참조하십시오.

  7. ==============================

    7.인증 유형이 기본 인증이고 게시 된 데이터가 json이면 다음과 같이하십시오.

    인증 유형이 기본 인증이고 게시 된 데이터가 json이면 다음과 같이하십시오.

    <?php
    
    $data = array("username" => "test"); // data u want to post                                                                   
    $data_string = json_encode($data);                                                                                   
     $api_key = "your_api_key";   
     $password = "xxxxxx";                                                                                                                 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, "https://xxxxxxxxxxxxxxxxxxxxxxx");    
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");  
    curl_setopt($ch, CURLOPT_POST, true);                                                                   
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);     
    curl_setopt($ch, CURLOPT_USERPWD, $api_key.':'.$password);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(   
        'Accept: application/json',
        'Content-Type: application/json')                                                           
    );             
    
    if(curl_exec($ch) === false)
    {
        echo 'Curl error: ' . curl_error($ch);
    }                                                                                                      
    $errors = curl_error($ch);                                                                                                            
    $result = curl_exec($ch);
    $returnCode = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);  
    echo $returnCode;
    var_dump($errors);
    print_r(json_decode($result, true));
    
  8. ==============================

    8.거기에 여러 개의 REST 프레임 워크가 있습니다. 나는 강력하게 PHP를위한 슬림 미니 프레임 워크를 조사하는 것이 좋습니다 다음은 다른 사람들의 목록입니다.

    거기에 여러 개의 REST 프레임 워크가 있습니다. 나는 강력하게 PHP를위한 슬림 미니 프레임 워크를 조사하는 것이 좋습니다 다음은 다른 사람들의 목록입니다.

  9. from https://stackoverflow.com/questions/2140419/how-do-i-make-a-request-using-http-basic-authentication-with-php-curl by cc-by-sa and MIT license