X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=http_request_api.c;h=f62881b1bf6b20a739595548370e87790485656c;hb=fe0761a31f82ea9807f9dcdc4bce3e9de9c766b4;hp=b253a97caae73cca8b99dcf883dd39889b81e52c;hpb=6aca56d611a22eb559098f3c02c31634a6f9ff9f;p=m6w6%2Fext-http diff --git a/http_request_api.c b/http_request_api.c index b253a97..f62881b 100644 --- a/http_request_api.c +++ b/http_request_api.c @@ -171,23 +171,23 @@ PHP_HTTP_API CURL * _http_curl_init_ex(CURL *ch, http_request *request) { if (ch || (ch = curl_easy_init())) { #if defined(ZTS) - HTTP_CURL_OPT_EX(ch, CURLOPT_NOSIGNAL, 1L); + curl_easy_setopt(ch, CURLOPT_NOSIGNAL, 1L); #endif - HTTP_CURL_OPT_EX(ch, CURLOPT_HEADER, 0L); - HTTP_CURL_OPT_EX(ch, CURLOPT_FILETIME, 1L); - HTTP_CURL_OPT_EX(ch, CURLOPT_AUTOREFERER, 1L); - HTTP_CURL_OPT_EX(ch, CURLOPT_VERBOSE, 1L); - HTTP_CURL_OPT_EX(ch, CURLOPT_HEADERFUNCTION, NULL); - HTTP_CURL_OPT_EX(ch, CURLOPT_DEBUGFUNCTION, http_curl_raw_callback); - HTTP_CURL_OPT_EX(ch, CURLOPT_READFUNCTION, http_curl_read_callback); - HTTP_CURL_OPT_EX(ch, CURLOPT_IOCTLFUNCTION, http_curl_ioctl_callback); - HTTP_CURL_OPT_EX(ch, CURLOPT_WRITEFUNCTION, http_curl_dummy_callback); + curl_easy_setopt(ch, CURLOPT_HEADER, 0L); + curl_easy_setopt(ch, CURLOPT_FILETIME, 1L); + curl_easy_setopt(ch, CURLOPT_AUTOREFERER, 1L); + curl_easy_setopt(ch, CURLOPT_VERBOSE, 1L); + curl_easy_setopt(ch, CURLOPT_HEADERFUNCTION, NULL); + curl_easy_setopt(ch, CURLOPT_DEBUGFUNCTION, http_curl_raw_callback); + curl_easy_setopt(ch, CURLOPT_READFUNCTION, http_curl_read_callback); + curl_easy_setopt(ch, CURLOPT_IOCTLFUNCTION, http_curl_ioctl_callback); + curl_easy_setopt(ch, CURLOPT_WRITEFUNCTION, http_curl_dummy_callback); /* set context */ if (request) { - HTTP_CURL_OPT_EX(ch, CURLOPT_PRIVATE, request); - HTTP_CURL_OPT_EX(ch, CURLOPT_DEBUGDATA, request); - HTTP_CURL_OPT_EX(ch, CURLOPT_ERRORBUFFER, request->_error); + curl_easy_setopt(ch, CURLOPT_PRIVATE, request); + curl_easy_setopt(ch, CURLOPT_DEBUGDATA, request); + curl_easy_setopt(ch, CURLOPT_ERRORBUFFER, request->_error); /* attach curl handle */ request->ch = ch; @@ -205,10 +205,10 @@ PHP_HTTP_API void _http_curl_free(CURL **ch) { if (*ch) { /* avoid nasty segfaults with already cleaned up callbacks */ - HTTP_CURL_OPT_EX(*ch, CURLOPT_NOPROGRESS, 1L); - HTTP_CURL_OPT_EX(*ch, CURLOPT_PROGRESSFUNCTION, NULL); - HTTP_CURL_OPT_EX(*ch, CURLOPT_VERBOSE, 0L); - HTTP_CURL_OPT_EX(*ch, CURLOPT_DEBUGFUNCTION, NULL); + curl_easy_setopt(*ch, CURLOPT_NOPROGRESS, 1L); + curl_easy_setopt(*ch, CURLOPT_PROGRESSFUNCTION, NULL); + curl_easy_setopt(*ch, CURLOPT_VERBOSE, 0L); + curl_easy_setopt(*ch, CURLOPT_DEBUGFUNCTION, NULL); curl_easy_cleanup(*ch); *ch = NULL; } @@ -347,6 +347,17 @@ PHP_HTTP_API void _http_request_defaults(http_request *request) HTTP_CURL_OPT(CURLOPT_PROXYTYPE, 0L); HTTP_CURL_OPT(CURLOPT_PROXYUSERPWD, NULL); HTTP_CURL_OPT(CURLOPT_PROXYAUTH, 0L); + HTTP_CURL_OPT(CURLOPT_DNS_CACHE_TIMEOUT, 60L); + HTTP_CURL_OPT(CURLOPT_LOW_SPEED_LIMIT, 0L); + HTTP_CURL_OPT(CURLOPT_LOW_SPEED_TIME, 0L); +#if HTTP_CURL_VERSION(7,15,5) + HTTP_CURL_OPT(CURLOPT_MAX_SEND_SPEED_LARGE, (curl_off_t) 0); + HTTP_CURL_OPT(CURLOPT_MAX_RECV_SPEED_LARGE, (curl_off_t) 0); +#endif + /* crashes + HTTP_CURL_OPT(CURLOPT_MAXCONNECTS, 5L); */ + HTTP_CURL_OPT(CURLOPT_FRESH_CONNECT, 0L); + HTTP_CURL_OPT(CURLOPT_FORBID_REUSE, 0L); HTTP_CURL_OPT(CURLOPT_INTERFACE, NULL); HTTP_CURL_OPT(CURLOPT_PORT, 0L); #if HTTP_CURL_VERSION(7,15,2) @@ -461,6 +472,37 @@ PHP_HTTP_API STATUS _http_request_prepare(http_request *request, HashTable *opti } } + /* dns */ + if ((zoption = http_request_option(request, options, "dns_cache_timeout", IS_LONG))) { + HTTP_CURL_OPT(CURLOPT_DNS_CACHE_TIMEOUT, Z_LVAL_P(zoption)); + } + + /* limits */ + if ((zoption = http_request_option(request, options, "low_speed_limit", IS_LONG))) { + HTTP_CURL_OPT(CURLOPT_LOW_SPEED_LIMIT, Z_LVAL_P(zoption)); + } + if ((zoption = http_request_option(request, options, "low_speed_time", IS_LONG))) { + HTTP_CURL_OPT(CURLOPT_LOW_SPEED_TIME, Z_LVAL_P(zoption)); + } +#if HTTP_CURL_VERSION(7,15,5) + if ((zoption = http_request_option(request, options, "max_send_speed", IS_LONG))) { + HTTP_CURL_OPT(CURLOPT_MAX_SEND_SPEED_LARGE, (curl_off_t) Z_LVAL_P(zoption)); + } + if ((zoption = http_request_option(request, options, "max_recv_speed", IS_LONG))) { + HTTP_CURL_OPT(CURLOPT_MAX_RECV_SPEED_LARGE, (curl_off_t) Z_LVAL_P(zoption)); + } +#endif + /* crashes + if ((zoption = http_request_option(request, options, "maxconnects", IS_LONG))) { + HTTP_CURL_OPT(CURLOPT_MAXCONNECTS, Z_LVAL_P(zoption)); + } */ + if ((zoption = http_request_option(request, options, "fresh_connect", IS_BOOL)) && Z_BVAL_P(zoption)) { + HTTP_CURL_OPT(CURLOPT_FRESH_CONNECT, 1L); + } + if ((zoption = http_request_option(request, options, "forbid_reuse", IS_BOOL)) && Z_BVAL_P(zoption)) { + HTTP_CURL_OPT(CURLOPT_FORBID_REUSE, 1L); + } + /* outgoing interface */ if ((zoption = http_request_option(request, options, "interface", IS_STRING))) { HTTP_CURL_OPT(CURLOPT_INTERFACE, Z_STRVAL_P(zoption)); @@ -814,45 +856,6 @@ PHP_HTTP_API void _http_request_exec(http_request *request) } /* }}} */ -/* {{{ void http_request_info(http_request *, HashTable *) */ -PHP_HTTP_API void _http_request_info(http_request *request, HashTable *info) -{ - zval array; - INIT_ZARR(array, info); - - HTTP_CURL_INFO(CURLINFO_EFFECTIVE_URL); - HTTP_CURL_INFO(CURLINFO_RESPONSE_CODE); - HTTP_CURL_INFO_EX(CURLINFO_HTTP_CONNECTCODE, "connect_code"); - HTTP_CURL_INFO(CURLINFO_FILETIME); - HTTP_CURL_INFO(CURLINFO_TOTAL_TIME); - HTTP_CURL_INFO(CURLINFO_NAMELOOKUP_TIME); - HTTP_CURL_INFO(CURLINFO_CONNECT_TIME); - HTTP_CURL_INFO(CURLINFO_PRETRANSFER_TIME); - HTTP_CURL_INFO(CURLINFO_STARTTRANSFER_TIME); - HTTP_CURL_INFO(CURLINFO_REDIRECT_TIME); - HTTP_CURL_INFO(CURLINFO_REDIRECT_COUNT); - HTTP_CURL_INFO(CURLINFO_SIZE_UPLOAD); - HTTP_CURL_INFO(CURLINFO_SIZE_DOWNLOAD); - HTTP_CURL_INFO(CURLINFO_SPEED_DOWNLOAD); - HTTP_CURL_INFO(CURLINFO_SPEED_UPLOAD); - HTTP_CURL_INFO(CURLINFO_HEADER_SIZE); - HTTP_CURL_INFO(CURLINFO_REQUEST_SIZE); - HTTP_CURL_INFO(CURLINFO_SSL_VERIFYRESULT); - HTTP_CURL_INFO(CURLINFO_SSL_ENGINES); - HTTP_CURL_INFO(CURLINFO_CONTENT_LENGTH_DOWNLOAD); - HTTP_CURL_INFO(CURLINFO_CONTENT_LENGTH_UPLOAD); - HTTP_CURL_INFO(CURLINFO_CONTENT_TYPE); - HTTP_CURL_INFO(CURLINFO_HTTPAUTH_AVAIL); - HTTP_CURL_INFO(CURLINFO_PROXYAUTH_AVAIL); - HTTP_CURL_INFO(CURLINFO_NUM_CONNECTS); -#if HTTP_CURL_VERSION(7,14,1) - HTTP_CURL_INFO_EX(CURLINFO_COOKIELIST, "cookies"); -#endif - HTTP_CURL_INFO(CURLINFO_OS_ERRNO); - add_assoc_string(&array, "error", request->_error, 1); -} -/* }}} */ - /* {{{ static size_t http_curl_read_callback(void *, size_t, size_t, void *) */ static size_t http_curl_read_callback(void *data, size_t len, size_t n, void *ctx) { @@ -978,6 +981,9 @@ static int http_curl_raw_callback(CURL *ch, curl_infotype type, char *data, size if (data[length-1] != 0xa) { fprintf(stderr, "\n"); } +#endif +#if 0 + fprintf(stderr, "%.*s%s", length, data, data[length-1]=='\n'?"":"\n"); #endif break; }