2 +--------------------------------------------------------------------+
4 +--------------------------------------------------------------------+
5 | Redistribution and use in source and binary forms, with or without |
6 | modification, are permitted provided that the conditions mentioned |
7 | in the accompanying LICENSE file are met. |
8 +--------------------------------------------------------------------+
9 | Copyright (c) 2004-2007, Michael Wallner <mike@php.net> |
10 +--------------------------------------------------------------------+
15 #define HTTP_WANT_CURL
19 #include "php_http_request_api.h"
21 /* {{{ void http_request_info(http_request *, HashTable *) */
22 PHP_HTTP_API
void _http_request_info(http_request
*request
, HashTable
*info
)
27 struct curl_slist
*s
, *p
;
28 zval
*subarray
, array
;
29 INIT_ZARR(array
, info
);
32 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_EFFECTIVE_URL
, &c
)) {
33 add_assoc_string_ex(&array
, "effective_url", sizeof("effective_url"), c
? c
: "", 1);
35 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_RESPONSE_CODE
, &l
)) {
36 add_assoc_long_ex(&array
, "response_code", sizeof("response_code"), l
);
38 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_TOTAL_TIME
, &d
)) {
39 add_assoc_double_ex(&array
, "total_time", sizeof("total_time"), d
);
41 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_NAMELOOKUP_TIME
, &d
)) {
42 add_assoc_double_ex(&array
, "namelookup_time", sizeof("namelookup_time"), d
);
44 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_CONNECT_TIME
, &d
)) {
45 add_assoc_double_ex(&array
, "connect_time", sizeof("connect_time"), d
);
47 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_PRETRANSFER_TIME
, &d
)) {
48 add_assoc_double_ex(&array
, "pretransfer_time", sizeof("pretransfer_time"), d
);
50 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_SIZE_UPLOAD
, &d
)) {
51 add_assoc_double_ex(&array
, "size_upload", sizeof("size_upload"), d
);
53 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_SIZE_DOWNLOAD
, &d
)) {
54 add_assoc_double_ex(&array
, "size_download", sizeof("size_download"), d
);
56 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_SPEED_DOWNLOAD
, &d
)) {
57 add_assoc_double_ex(&array
, "speed_download", sizeof("speed_download"), d
);
59 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_SPEED_UPLOAD
, &d
)) {
60 add_assoc_double_ex(&array
, "speed_upload", sizeof("speed_upload"), d
);
62 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_HEADER_SIZE
, &l
)) {
63 add_assoc_long_ex(&array
, "header_size", sizeof("header_size"), l
);
65 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_REQUEST_SIZE
, &l
)) {
66 add_assoc_long_ex(&array
, "request_size", sizeof("request_size"), l
);
68 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_SSL_VERIFYRESULT
, &l
)) {
69 add_assoc_long_ex(&array
, "ssl_verifyresult", sizeof("ssl_verifyresult"), l
);
71 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_FILETIME
, &l
)) {
72 add_assoc_long_ex(&array
, "filetime", sizeof("filetime"), l
);
74 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_CONTENT_LENGTH_DOWNLOAD
, &d
)) {
75 add_assoc_double_ex(&array
, "content_length_download", sizeof("content_length_download"), d
);
77 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_CONTENT_LENGTH_UPLOAD
, &d
)) {
78 add_assoc_double_ex(&array
, "content_length_upload", sizeof("content_length_upload"), d
);
80 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_STARTTRANSFER_TIME
, &d
)) {
81 add_assoc_double_ex(&array
, "starttransfer_time", sizeof("starttransfer_time"), d
);
83 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_CONTENT_TYPE
, &c
)) {
84 add_assoc_string_ex(&array
, "content_type", sizeof("content_type"), c
? c
: "", 1);
86 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_REDIRECT_TIME
, &d
)) {
87 add_assoc_double_ex(&array
, "redirect_time", sizeof("redirect_time"), d
);
89 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_REDIRECT_COUNT
, &l
)) {
90 add_assoc_long_ex(&array
, "redirect_count", sizeof("redirect_count"), l
);
92 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_HTTP_CONNECTCODE
, &l
)) {
93 add_assoc_long_ex(&array
, "connect_code", sizeof("connect_code"), l
);
95 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_HTTPAUTH_AVAIL
, &l
)) {
96 add_assoc_long_ex(&array
, "httpauth_avail", sizeof("httpauth_avail"), l
);
98 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_PROXYAUTH_AVAIL
, &l
)) {
99 add_assoc_long_ex(&array
, "proxyauth_avail", sizeof("proxyauth_avail"), l
);
101 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_OS_ERRNO
, &l
)) {
102 add_assoc_long_ex(&array
, "os_errno", sizeof("os_errno"), l
);
104 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_NUM_CONNECTS
, &l
)) {
105 add_assoc_long_ex(&array
, "num_connects", sizeof("num_connects"), l
);
107 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_SSL_ENGINES
, &s
)) {
108 MAKE_STD_ZVAL(subarray
);
109 array_init(subarray
);
110 for (p
= s
; p
; p
= p
->next
) {
111 add_next_index_string(subarray
, p
->data
, 1);
113 add_assoc_zval_ex(&array
, "ssl_engines", sizeof("ssl_engines"), subarray
);
114 curl_slist_free_all(s
);
116 #if HTTP_CURL_VERSION(7,14,1)
117 if (CURLE_OK
== curl_easy_getinfo(request
->ch
, CURLINFO_COOKIELIST
, &s
)) {
118 MAKE_STD_ZVAL(subarray
);
119 array_init(subarray
);
120 for (p
= s
; p
; p
= p
->next
) {
121 add_next_index_string(subarray
, p
->data
, 1);
123 add_assoc_zval_ex(&array
, "cookies", sizeof("cookies"), subarray
);
124 curl_slist_free_all(s
);
128 add_assoc_string_ex(&array
, "error", sizeof("error"), http_request_storage_get(request
->ch
)->errorbuffer
, 1);
132 #endif /* HTTP_HAVE_CURL */
139 * vim600: noet sw=4 ts=4 fdm=marker
140 * vim<600: noet sw=4 ts=4