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-2010, Michael Wallner <mike@php.net> |
10 +--------------------------------------------------------------------+
13 /* $Id: http_request_info.c 293136 2010-01-05 08:48:52Z mike $ */
17 PHP_HTTP_API
void php_http_request_info(php_http_request_t
*request
, HashTable
*info
)
22 struct curl_slist
*s
, *p
;
23 zval
*subarray
, array
;
24 INIT_PZVAL_ARRAY(&array
, info
);
27 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_EFFECTIVE_URL
, &c
)) {
28 add_assoc_string_ex(&array
, "effective_url", sizeof("effective_url"), c
? c
: "", 1);
30 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_RESPONSE_CODE
, &l
)) {
31 add_assoc_long_ex(&array
, "response_code", sizeof("response_code"), l
);
33 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_TOTAL_TIME
, &d
)) {
34 add_assoc_double_ex(&array
, "total_time", sizeof("total_time"), d
);
36 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_NAMELOOKUP_TIME
, &d
)) {
37 add_assoc_double_ex(&array
, "namelookup_time", sizeof("namelookup_time"), d
);
39 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_CONNECT_TIME
, &d
)) {
40 add_assoc_double_ex(&array
, "connect_time", sizeof("connect_time"), d
);
42 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_PRETRANSFER_TIME
, &d
)) {
43 add_assoc_double_ex(&array
, "pretransfer_time", sizeof("pretransfer_time"), d
);
45 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_SIZE_UPLOAD
, &d
)) {
46 add_assoc_double_ex(&array
, "size_upload", sizeof("size_upload"), d
);
48 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_SIZE_DOWNLOAD
, &d
)) {
49 add_assoc_double_ex(&array
, "size_download", sizeof("size_download"), d
);
51 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_SPEED_DOWNLOAD
, &d
)) {
52 add_assoc_double_ex(&array
, "speed_download", sizeof("speed_download"), d
);
54 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_SPEED_UPLOAD
, &d
)) {
55 add_assoc_double_ex(&array
, "speed_upload", sizeof("speed_upload"), d
);
57 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_HEADER_SIZE
, &l
)) {
58 add_assoc_long_ex(&array
, "header_size", sizeof("header_size"), l
);
60 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_REQUEST_SIZE
, &l
)) {
61 add_assoc_long_ex(&array
, "request_size", sizeof("request_size"), l
);
63 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_SSL_VERIFYRESULT
, &l
)) {
64 add_assoc_long_ex(&array
, "ssl_verifyresult", sizeof("ssl_verifyresult"), l
);
66 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_FILETIME
, &l
)) {
67 add_assoc_long_ex(&array
, "filetime", sizeof("filetime"), l
);
69 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_CONTENT_LENGTH_DOWNLOAD
, &d
)) {
70 add_assoc_double_ex(&array
, "content_length_download", sizeof("content_length_download"), d
);
72 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_CONTENT_LENGTH_UPLOAD
, &d
)) {
73 add_assoc_double_ex(&array
, "content_length_upload", sizeof("content_length_upload"), d
);
75 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_STARTTRANSFER_TIME
, &d
)) {
76 add_assoc_double_ex(&array
, "starttransfer_time", sizeof("starttransfer_time"), d
);
78 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_CONTENT_TYPE
, &c
)) {
79 add_assoc_string_ex(&array
, "content_type", sizeof("content_type"), c
? c
: "", 1);
81 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_REDIRECT_TIME
, &d
)) {
82 add_assoc_double_ex(&array
, "redirect_time", sizeof("redirect_time"), d
);
84 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_REDIRECT_COUNT
, &l
)) {
85 add_assoc_long_ex(&array
, "redirect_count", sizeof("redirect_count"), l
);
87 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_HTTP_CONNECTCODE
, &l
)) {
88 add_assoc_long_ex(&array
, "connect_code", sizeof("connect_code"), l
);
90 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_HTTPAUTH_AVAIL
, &l
)) {
91 add_assoc_long_ex(&array
, "httpauth_avail", sizeof("httpauth_avail"), l
);
93 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_PROXYAUTH_AVAIL
, &l
)) {
94 add_assoc_long_ex(&array
, "proxyauth_avail", sizeof("proxyauth_avail"), l
);
96 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_OS_ERRNO
, &l
)) {
97 add_assoc_long_ex(&array
, "os_errno", sizeof("os_errno"), l
);
99 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_NUM_CONNECTS
, &l
)) {
100 add_assoc_long_ex(&array
, "num_connects", sizeof("num_connects"), l
);
102 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_SSL_ENGINES
, &s
)) {
103 MAKE_STD_ZVAL(subarray
);
104 array_init(subarray
);
105 for (p
= s
; p
; p
= p
->next
) {
107 add_next_index_string(subarray
, p
->data
, 1);
110 add_assoc_zval_ex(&array
, "ssl_engines", sizeof("ssl_engines"), subarray
);
111 curl_slist_free_all(s
);
113 #if PHP_HTTP_CURL_VERSION(7,14,1)
114 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_COOKIELIST
, &s
)) {
115 MAKE_STD_ZVAL(subarray
);
116 array_init(subarray
);
117 for (p
= s
; p
; p
= p
->next
) {
119 add_next_index_string(subarray
, p
->data
, 1);
122 add_assoc_zval_ex(&array
, "cookies", sizeof("cookies"), subarray
);
123 curl_slist_free_all(s
);
126 #if PHP_HTTP_CURL_VERSION(7,18,2)
127 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_REDIRECT_URL
, &c
)) {
128 add_assoc_string_ex(&array
, "redirect_url", sizeof("redirect_url"), c
? c
: "", 1);
131 #if PHP_HTTP_CURL_VERSION(7,19,0)
132 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_PRIMARY_IP
, &c
)) {
133 add_assoc_string_ex(&array
, "primary_ip", sizeof("primary_ip"), c
? c
: "", 1);
136 #if PHP_HTTP_CURL_VERSION(7,19,0)
137 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_APPCONNECT_TIME
, &d
)) {
138 add_assoc_double_ex(&array
, "appconnect_time", sizeof("appconnect_time"), d
);
141 #if PHP_HTTP_CURL_VERSION(7,19,4)
142 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_CONDITION_UNMET
, &l
)) {
143 add_assoc_long_ex(&array
, "condition_unmet", sizeof("condition_unmet"), l
);
147 #if PHP_HTTP_CURL_VERSION(7,19,1) && defined(PHP_HTTP_HAVE_OPENSSL)
151 struct curl_certinfo
*ci
;
152 char *colon
, *keyname
;
154 if (CURLE_OK
== curl_easy_getinfo(request
->curl
.handle
, CURLINFO_CERTINFO
, &ci
)) {
155 MAKE_STD_ZVAL(ci_array
);
156 array_init(ci_array
);
158 for (i
= 0; i
< ci
->num_of_certs
; ++i
) {
161 MAKE_STD_ZVAL(subarray
);
162 array_init(subarray
);
163 for (p
= s
; p
; p
= p
->next
) {
165 if ((colon
= strchr(p
->data
, ':'))) {
166 keyname
= estrndup(p
->data
, colon
- p
->data
);
167 add_assoc_string_ex(subarray
, keyname
, colon
- p
->data
+ 1, colon
+ 1, 1);
170 add_next_index_string(subarray
, p
->data
, 1);
174 add_next_index_zval(ci_array
, subarray
);
176 add_assoc_zval_ex(&array
, "certinfo", sizeof("certinfo"), ci_array
);
180 add_assoc_string_ex(&array
, "error", sizeof("error"), php_http_request_storage_get(request
->curl
.handle
)->errorbuffer
, 1);
189 * vim600: noet sw=4 ts=4 fdm=marker
190 * vim<600: noet sw=4 ts=4