3 +----------------------------------------------------------------------+
7 +----------------------------------------------------------------------+
9 | This source file is subject to version 3.0 of the PHP license, that |
11 | is bundled with this package in the file LICENSE, and is available |
13 | through the world-wide-web at http://www.php.net/license/3_0.txt. |
15 | If you did not receive a copy of the PHP license and are unable to |
17 | obtain it through the world-wide-web, please send a note to |
19 | license@php.net so we can mail you a copy immediately. |
21 +----------------------------------------------------------------------+
23 | Copyright (c) 2004-2005 Michael Wallner <mike@php.net> |
25 +----------------------------------------------------------------------+
49 # include <winsock2.h>
53 # include <curl/curl.h>
63 #include "php_http_std_defs.h"
65 #include "php_http_request_object.h"
67 #include "php_http_request_api.h"
77 #define http_request_object_declare_default_properties() _http_request_object_declare_default_properties(TSRMLS_C)
79 static inline void _http_request_object_declare_default_properties(TSRMLS_D
);
83 zend_class_entry
*http_request_object_ce
;
85 zend_function_entry http_request_object_fe
[] = {
87 PHP_ME(HttpRequest
, __construct
, NULL
, ZEND_ACC_PUBLIC
|ZEND_ACC_CTOR
)
89 PHP_ME(HttpRequest
, __destruct
, NULL
, ZEND_ACC_PUBLIC
|ZEND_ACC_DTOR
)
93 PHP_ME(HttpRequest
, setOptions
, NULL
, ZEND_ACC_PUBLIC
)
95 PHP_ME(HttpRequest
, getOptions
, NULL
, ZEND_ACC_PUBLIC
)
97 PHP_ME(HttpRequest
, unsetOptions
, NULL
, ZEND_ACC_PUBLIC
)
99 PHP_ME(HttpRequest
, setSslOptions
, NULL
, ZEND_ACC_PUBLIC
)
101 PHP_ME(HttpRequest
, getSslOptions
, NULL
, ZEND_ACC_PUBLIC
)
103 PHP_ME(HttpRequest
, unsetSslOptions
, NULL
, ZEND_ACC_PUBLIC
)
107 PHP_ME(HttpRequest
, addHeaders
, NULL
, ZEND_ACC_PUBLIC
)
109 PHP_ME(HttpRequest
, getHeaders
, NULL
, ZEND_ACC_PUBLIC
)
111 PHP_ME(HttpRequest
, unsetHeaders
, NULL
, ZEND_ACC_PUBLIC
)
113 PHP_ME(HttpRequest
, addCookies
, NULL
, ZEND_ACC_PUBLIC
)
115 PHP_ME(HttpRequest
, getCookies
, NULL
, ZEND_ACC_PUBLIC
)
117 PHP_ME(HttpRequest
, unsetCookies
, NULL
, ZEND_ACC_PUBLIC
)
121 PHP_ME(HttpRequest
, setMethod
, NULL
, ZEND_ACC_PUBLIC
)
123 PHP_ME(HttpRequest
, getMethod
, NULL
, ZEND_ACC_PUBLIC
)
127 PHP_ME(HttpRequest
, setURL
, NULL
, ZEND_ACC_PUBLIC
)
129 PHP_ME(HttpRequest
, getURL
, NULL
, ZEND_ACC_PUBLIC
)
133 PHP_ME(HttpRequest
, setContentType
, NULL
, ZEND_ACC_PUBLIC
)
135 PHP_ME(HttpRequest
, getContentType
, NULL
, ZEND_ACC_PUBLIC
)
139 PHP_ME(HttpRequest
, setQueryData
, NULL
, ZEND_ACC_PUBLIC
)
141 PHP_ME(HttpRequest
, getQueryData
, NULL
, ZEND_ACC_PUBLIC
)
143 PHP_ME(HttpRequest
, addQueryData
, NULL
, ZEND_ACC_PUBLIC
)
145 PHP_ME(HttpRequest
, unsetQueryData
, NULL
, ZEND_ACC_PUBLIC
)
149 PHP_ME(HttpRequest
, setPostData
, NULL
, ZEND_ACC_PUBLIC
)
151 PHP_ME(HttpRequest
, getPostData
, NULL
, ZEND_ACC_PUBLIC
)
153 PHP_ME(HttpRequest
, addPostData
, NULL
, ZEND_ACC_PUBLIC
)
155 PHP_ME(HttpRequest
, unsetPostData
, NULL
, ZEND_ACC_PUBLIC
)
159 PHP_ME(HttpRequest
, addPostFile
, NULL
, ZEND_ACC_PUBLIC
)
161 PHP_ME(HttpRequest
, getPostFiles
, NULL
, ZEND_ACC_PUBLIC
)
163 PHP_ME(HttpRequest
, unsetPostFiles
, NULL
, ZEND_ACC_PUBLIC
)
167 PHP_ME(HttpRequest
, send
, NULL
, ZEND_ACC_PUBLIC
)
171 PHP_ME(HttpRequest
, getResponseData
, NULL
, ZEND_ACC_PUBLIC
)
173 PHP_ME(HttpRequest
, getResponseHeader
, NULL
, ZEND_ACC_PUBLIC
)
175 PHP_ME(HttpRequest
, getResponseCookie
, NULL
, ZEND_ACC_PUBLIC
)
177 PHP_ME(HttpRequest
, getResponseCode
, NULL
, ZEND_ACC_PUBLIC
)
179 PHP_ME(HttpRequest
, getResponseBody
, NULL
, ZEND_ACC_PUBLIC
)
181 PHP_ME(HttpRequest
, getResponseInfo
, NULL
, ZEND_ACC_PUBLIC
)
183 PHP_ME(HttpRequest
, getResponseMessage
, NULL
, ZEND_ACC_PUBLIC
)
191 static zend_object_handlers http_request_object_handlers
;
195 void _http_request_object_init(INIT_FUNC_ARGS
)
199 HTTP_REGISTER_CLASS_EX(HttpRequest
, http_request_object
, NULL
, 0);
205 HTTP_LONG_CONSTANT("HTTP_GET", HTTP_GET
);
207 HTTP_LONG_CONSTANT("HTTP_HEAD", HTTP_HEAD
);
209 HTTP_LONG_CONSTANT("HTTP_POST", HTTP_POST
);
211 HTTP_LONG_CONSTANT("HTTP_PUT", HTTP_PUT
);
213 HTTP_LONG_CONSTANT("HTTP_DELETE", HTTP_DELETE
);
215 HTTP_LONG_CONSTANT("HTTP_OPTIONS", HTTP_OPTIONS
);
217 HTTP_LONG_CONSTANT("HTTP_TRACE", HTTP_TRACE
);
219 HTTP_LONG_CONSTANT("HTTP_CONNECT", HTTP_CONNECT
);
221 /* WebDAV - RFC 2518 */
223 HTTP_LONG_CONSTANT("HTTP_PROPFIND", HTTP_PROPFIND
);
225 HTTP_LONG_CONSTANT("HTTP_PROPPATCH", HTTP_PROPPATCH
);
227 HTTP_LONG_CONSTANT("HTTP_MKCOL", HTTP_MKCOL
);
229 HTTP_LONG_CONSTANT("HTTP_COPY", HTTP_COPY
);
231 HTTP_LONG_CONSTANT("HTTP_MOVE", HTTP_MOVE
);
233 HTTP_LONG_CONSTANT("HTTP_LOCK", HTTP_LOCK
);
235 HTTP_LONG_CONSTANT("HTTP_UNLOCK", HTTP_UNLOCK
);
237 /* WebDAV Versioning - RFC 3253 */
239 HTTP_LONG_CONSTANT("HTTP_VERSION_CONTROL", HTTP_VERSION_CONTROL
);
241 HTTP_LONG_CONSTANT("HTTP_REPORT", HTTP_REPORT
);
243 HTTP_LONG_CONSTANT("HTTP_CHECKOUT", HTTP_CHECKOUT
);
245 HTTP_LONG_CONSTANT("HTTP_CHECKIN", HTTP_CHECKIN
);
247 HTTP_LONG_CONSTANT("HTTP_UNCHECKOUT", HTTP_UNCHECKOUT
);
249 HTTP_LONG_CONSTANT("HTTP_MKWORKSPACE", HTTP_MKWORKSPACE
);
251 HTTP_LONG_CONSTANT("HTTP_UPDATE", HTTP_UPDATE
);
253 HTTP_LONG_CONSTANT("HTTP_LABEL", HTTP_LABEL
);
255 HTTP_LONG_CONSTANT("HTTP_MERGE", HTTP_MERGE
);
257 HTTP_LONG_CONSTANT("HTTP_BASELINE_CONTROL", HTTP_BASELINE_CONTROL
);
259 HTTP_LONG_CONSTANT("HTTP_MKACTIVITY", HTTP_MKACTIVITY
);
261 /* WebDAV Access Control - RFC 3744 */
263 HTTP_LONG_CONSTANT("HTTP_ACL", HTTP_ACL
);
269 # if LIBCURL_VERSION_NUM >= 0x070a05
271 HTTP_LONG_CONSTANT("HTTP_AUTH_BASIC", CURLAUTH_BASIC
);
273 HTTP_LONG_CONSTANT("HTTP_AUTH_DIGEST", CURLAUTH_DIGEST
);
275 HTTP_LONG_CONSTANT("HTTP_AUTH_NTLM", CURLAUTH_NTLM
);
277 # endif /* LIBCURL_VERSION_NUM */
283 zend_object_value
_http_request_object_new(zend_class_entry
*ce TSRMLS_DC
)
287 zend_object_value ov
;
289 http_request_object
*o
;
293 o
= ecalloc(1, sizeof(http_request_object
));
297 o
->ch
= curl_easy_init();
301 phpstr_init_ex(&o
->response
, HTTP_CURLBUF_SIZE
, 0);
305 ALLOC_HASHTABLE(OBJ_PROP(o
));
307 zend_hash_init(OBJ_PROP(o
), 0, NULL
, ZVAL_PTR_DTOR
, 0);
309 zend_hash_copy(OBJ_PROP(o
), &ce
->default_properties
, (copy_ctor_func_t
) zval_add_ref
, NULL
, sizeof(zval
*));
313 ov
.handle
= zend_objects_store_put(o
, (zend_objects_store_dtor_t
) zend_objects_destroy_object
, http_request_object_free
, NULL TSRMLS_CC
);
315 ov
.handlers
= &http_request_object_handlers
;
325 static inline void _http_request_object_declare_default_properties(TSRMLS_D
)
329 zend_class_entry
*ce
= http_request_object_ce
;
333 DCL_PROP_N(PROTECTED
, options
);
335 DCL_PROP_N(PROTECTED
, responseInfo
);
337 DCL_PROP_N(PROTECTED
, responseData
);
339 DCL_PROP_N(PROTECTED
, responseCode
);
341 DCL_PROP_N(PROTECTED
, responseMessage
);
343 DCL_PROP_N(PROTECTED
, postData
);
345 DCL_PROP_N(PROTECTED
, postFiles
);
349 DCL_PROP(PROTECTED
, long, method
, HTTP_GET
);
353 DCL_PROP(PROTECTED
, string
, url
, "");
355 DCL_PROP(PROTECTED
, string
, contentType
, "");
357 DCL_PROP(PROTECTED
, string
, queryData
, "");
359 DCL_PROP(PROTECTED
, string
, postData
, "");
365 void _http_request_object_free(zend_object
*object TSRMLS_DC
)
369 http_request_object
*o
= (http_request_object
*) object
;
375 zend_hash_destroy(OBJ_PROP(o
));
377 FREE_HASHTABLE(OBJ_PROP(o
));
383 curl_easy_cleanup(o
->ch
);
387 phpstr_dtor(&o
->response
);
395 #endif /* HTTP_HAVE_CURL */
397 #endif /* ZEND_ENGINE_2 */
411 * vim600: noet sw=4 ts=4 fdm=marker
413 * vim<600: noet sw=4 ts=4