zval **header_val;
if (SUCCESS == zend_hash_get_current_data_ex(Z_ARRVAL_P(zoption), (void **) &header_val, &pos)) {
char header[1024] = {0};
+ zval val;
- SEPARATE_ZVAL(header_val);
- convert_to_string(*header_val);
+ val = **header_val;
+ zval_copy_ctor(&val);
+ INIT_PZVAL(&val);
+ convert_to_string(&val);
- snprintf(header, 1023, "%s: %s", header_key, Z_STRVAL_PP(header_val));
+ snprintf(header, 1023, "%s: %s", header_key, Z_STRVAL(val));
request->_cache.headers = curl_slist_append(request->_cache.headers, header);
+ zval_dtor(&val);
}
/* reset */
/* cookies, array('name' => 'value') */
if ((zoption = http_request_option(request, options, "cookies", IS_ARRAY))) {
- char *cookie_key = NULL;
- ulong cookie_idx = 0;
- HashPosition pos;
-
phpstr_dtor(&request->_cache.cookies);
-
- FOREACH_KEY(pos, zoption, cookie_key, cookie_idx) {
- if (cookie_key) {
- zval **cookie_val;
- if (SUCCESS == zend_hash_get_current_data_ex(Z_ARRVAL_P(zoption), (void **) &cookie_val, &pos)) {
- zval *cpy, *val = convert_to_type_ex(IS_STRING, *cookie_val, &cpy);
-
- phpstr_appendf(&request->_cache.cookies, "%s=%s; ", cookie_key, Z_STRVAL_P(val));
-
- if (cpy) {
- zval_ptr_dtor(&cpy);
- }
- }
-
- /* reset */
- cookie_key = NULL;
- }
- }
-
- if (request->_cache.cookies.used) {
+ if (SUCCESS == http_urlencode_hash_recursive(HASH_OF(zoption), &request->_cache.cookies, "; ", sizeof("; ")-1, NULL, 0)) {
phpstr_fix(&request->_cache.cookies);
HTTP_CURL_OPT(COOKIE, request->_cache.cookies.data);
}