[] Función de PHP CURL (soportes GET, POST, xml, la carga de archivos)

funciones CURL

rizar presentación forma analógica, bajo el registro aquí, que se utiliza para facilitar su uso futuro

1, el apoyo GET, POST, XML, archivos subidos ...

/**
 * curl
 * @param      $url
 * @param null $data
 * @param null $BOUNDARY
 * @return mixed
 * @throws \Exception
 * @author   liuml  <[email protected]>
 * @DateTime 2018/12/21  15:52
 */
public function curl($url, $data = NULL, $format = 'XML', $timeOut = 30)
{
    $ch = curl_init();  // 初始一个curl会话
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_URL, $url);    // 设置url

    switch ($format) {
        case 'XML':
            $headers = [
                "Content-Type:text/xml; charset=utf-8",
            ];
            break;
        case 'FileUp':
            $headers = [
                "content-type:multipart/form-data",
            ];
            break;
        default:
            $headers = [
                "Content-Type:application/x-www-form-urlencoded; charset=utf-8",
            ];
            break;
    }

    if ($headers) {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }

    if (substr($url, 0, 5) == 'https') {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    }
    if (!empty($data)) {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeOut); // PHP脚本在成功连接服务器前等待多久,单位秒
    curl_setopt($ch, CURLOPT_HEADER, false);
    $reponse = curl_exec($ch);   // 抓取URL并把它传递给浏览器// 是否报错
    if (curl_errno($ch) > 0) {
        throw new \Exception($this->curlErrnoContrast(curl_errno($ch)), 0);
    } else {
        $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if (200 !== $httpStatusCode) {
            throw new \Exception($reponse, $httpStatusCode);
        }
    }
    // curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    // $request_header = curl_getinfo($ch);
    curl_close($ch);
    return $reponse;
}

/**
 * curlErrnoContrast
 * @param $code
 * @return mixed
 * @author   liuml  <[email protected]>
 * @DateTime 2019/1/24  10:20
 */
public function curlErrnoContrast($code)
{
    $error_codes = [
        '1'  => 'CURLE_UNSUPPORTED_PROTOCOL',
        '2'  => 'CURLE_FAILED_INIT',
        '3'  => 'CURLE_URL_MALFORMAT',
        '4'  => 'CURLE_URL_MALFORMAT_USER',
        '5'  => 'CURLE_COULDNT_RESOLVE_PROXY',
        '6'  => 'CURLE_COULDNT_RESOLVE_HOST',
        '7'  => 'CURLE_COULDNT_CONNECT',
        '8'  => 'CURLE_FTP_WEIRD_SERVER_REPLY',
        '9'  => 'CURLE_REMOTE_ACCESS_DENIED',
        '11' => 'CURLE_FTP_WEIRD_PASS_REPLY',
        '13' => 'CURLE_FTP_WEIRD_PASV_REPLY',
        '14' => 'CURLE_FTP_WEIRD_227_FORMAT',
        '15' => 'CURLE_FTP_CANT_GET_HOST',
        '17' => 'CURLE_FTP_COULDNT_SET_TYPE',
        '18' => 'CURLE_PARTIAL_FILE',
        '19' => 'CURLE_FTP_COULDNT_RETR_FILE',
        '21' => 'CURLE_QUOTE_ERROR',
        '22' => 'CURLE_HTTP_RETURNED_ERROR',
        '23' => 'CURLE_WRITE_ERROR',
        '25' => 'CURLE_UPLOAD_FAILED',
        '26' => 'CURLE_READ_ERROR',
        '27' => 'CURLE_OUT_OF_MEMORY',
        '28' => 'CURLE_OPERATION_TIMEDOUT',
        '30' => 'CURLE_FTP_PORT_FAILED',
        '31' => 'CURLE_FTP_COULDNT_USE_REST',
        '33' => 'CURLE_RANGE_ERROR',
        '34' => 'CURLE_HTTP_POST_ERROR',
        '35' => 'CURLE_SSL_CONNECT_ERROR',
        '36' => 'CURLE_BAD_DOWNLOAD_RESUME',
        '37' => 'CURLE_FILE_COULDNT_READ_FILE',
        '38' => 'CURLE_LDAP_CANNOT_BIND',
        '39' => 'CURLE_LDAP_SEARCH_FAILED',
        '41' => 'CURLE_FUNCTION_NOT_FOUND',
        '42' => 'CURLE_ABORTED_BY_CALLBACK',
        '43' => 'CURLE_BAD_FUNCTION_ARGUMENT',
        '45' => 'CURLE_INTERFACE_FAILED',
        '47' => 'CURLE_TOO_MANY_REDIRECTS',
        '48' => 'CURLE_UNKNOWN_TELNET_OPTION',
        '49' => 'CURLE_TELNET_OPTION_SYNTAX',
        '51' => 'CURLE_PEER_FAILED_VERIFICATION',
        '52' => 'CURLE_GOT_NOTHING',
        '53' => 'CURLE_SSL_ENGINE_NOTFOUND',
        '54' => 'CURLE_SSL_ENGINE_SETFAILED',
        '55' => 'CURLE_SEND_ERROR',
        '56' => 'CURLE_RECV_ERROR',
        '58' => 'CURLE_SSL_CERTPROBLEM',
        '59' => 'CURLE_SSL_CIPHER',
        '60' => 'CURLE_SSL_CACERT',
        '61' => 'CURLE_BAD_CONTENT_ENCODING',
        '62' => 'CURLE_LDAP_INVALID_URL',
        '63' => 'CURLE_FILESIZE_EXCEEDED',
        '64' => 'CURLE_USE_SSL_FAILED',
        '65' => 'CURLE_SEND_FAIL_REWIND',
        '66' => 'CURLE_SSL_ENGINE_INITFAILED',
        '67' => 'CURLE_LOGIN_DENIED',
        '68' => 'CURLE_TFTP_NOTFOUND',
        '69' => 'CURLE_TFTP_PERM',
        '70' => 'CURLE_REMOTE_DISK_FULL',
        '71' => 'CURLE_TFTP_ILLEGAL',
        '72' => 'CURLE_TFTP_UNKNOWNID',
        '73' => 'CURLE_REMOTE_FILE_EXISTS',
        '74' => 'CURLE_TFTP_NOSUCHUSER',
        '75' => 'CURLE_CONV_FAILED',
        '76' => 'CURLE_CONV_REQD',
        '77' => 'CURLE_SSL_CACERT_BADFILE',
        '78' => 'CURLE_REMOTE_FILE_NOT_FOUND',
        '79' => 'CURLE_SSH',
        '80' => 'CURLE_SSL_SHUTDOWN_FAILED',
        '81' => 'CURLE_AGAIN',
        '82' => 'CURLE_SSL_CRL_BADFILE',
        '83' => 'CURLE_SSL_ISSUER_ERROR',
        '84' => 'CURLE_FTP_PRET_FAILED',
        '85' => 'CURLE_RTSP_CSEQ_ERROR',
        '86' => 'CURLE_RTSP_SESSION_ERROR',
        '87' => 'CURLE_FTP_BAD_FILE_LIST',
        '88' => 'CURLE_CHUNK_FAILED',
    ];
    return $error_codes[$code] ?? '';
}

2, por lo general no tienen necesidades especiales utilizan el siguiente en la línea de

public function https_request($url, $data = null)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    if(substr($url,0,5) == 'https'){
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);  // 从证书中检查SSL加密算法是否存在
    }
    if (!empty($data)){
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return $output;
}
Publicado 41 artículos originales · ganado elogios 21 · Vistas a 70000 +

Supongo que te gusta

Origin blog.csdn.net/u010324331/article/details/86645339
Recomendado
Clasificación