2012-03-14 4 views
2

У меня есть страница ColdFusion, которая добавляет URL-адрес с переменными формы. Я пытаюсь повторить этот код в PHP:Cfhttp "POST" в php

<cfhttp method="Post" url='http://api.test.com/import-lead-data.php'> 
      <cfoutput> 
       <cfhttpparam name="BAL_ONE" type="formField" value="#BAL_ONE#"> 
     <!--- <cfhttpparam name="MTG_ONE_INT" type="formField" value="#MTG_ONE_INT#"> 
       <cfhttpparam name="MTG_TWO" type="formField" value="#MTG_TWO#"> 
       <cfhttpparam name="BAL_TWO" type="formField" value="#BAL_TWO#"> 
       <cfhttpparam name="ADD_CASH" type="formField" value="#ADD_CASH#">---> 
       <cfhttpparam name="PRODUCT" type="formField" value="#PRODUCT#"> 
       <cfhttpparam name="PROP_ST" type="formField" value="#PROP_ST#"> 
       <cfhttpparam name="CRED_GRADE" type="formField" value="#CRED_GRADE#"> 
       <cfhttpparam name="PROP_ZIP" type="formField" value="#PROP_ZIP#"> 
       <cfhttpparam name="PROP_DESC" type="formField" value="#PROP_DESC#"> 
       <cfhttpparam name="SPEC_HOME" type="formField" value="#SPEC_HOME#"> 
       <cfhttpparam name="PURCHASE_CONTRACT" type="formField" value="#PURCHASE_CONTRACT#"> 
       <cfhttpparam name="EST_VAL" type="formField" value="#EST_VAL#"> 
       <cfhttpparam name="DOWN_PMT" type="formField" value="#DOWN_PMT#"> 
       <cfhttpparam name="LOAN_TYPE" type="formField" value="#LOAN_TYPE#"> 
       <cfhttpparam name="BUY_TIMEFRAME" type="formField" value="#BUY_TIMEFRAME#"> 
       <cfhttpparam name="AGENT_FOUND" type="formField" value="#AGENT_FOUND#"> 
       <cfhttpparam name="VA_STATUS" type="formField" value="#VA_STATUS#"> 
       <cfhttpparam name="INCOME" type="formField" value="#INCOME#"> 
       <cfhttpparam name="ANNUAL_VERIFIABLE_INCOME" type="formField" value="#ANNUAL_VERIFIABLE_INCOME#"> 
       <cfhttpparam name="FHA_BANK_FORECLOSURE" type="formField" value="#FHA_BANK_FORECLOSURE#"> 
       <cfhttpparam name="NUM_MORTGAGE_LATES" type="formField" value="#NUM_MORTGAGE_LATES#"> 
       <cfhttpparam name="EMAIL" type="formField" value="#EMAIL#"> 
       <cfhttpparam name="FNAME" type="formField" value="#FNAME#"> 
       <cfhttpparam name="LNAME" type="formField" value="#LNAME#"> 
       <cfhttpparam name="ADDRESS" type="formField" value="#ADDRESS#"> 
       <cfhttpparam name="CITY" type="formField" value="#CITY#"> 
       <cfhttpparam name="STATE" type="formField" value="#STATE#"> 
       <cfhttpparam name="ZIP" type="formField" value="#ZIP#"> 
       <cfhttpparam name="PRI_PHON" type="formField" value="#PRI_PHON#"> 
       <cfhttpparam name="SEC_PHON" type="formField" value="#SEC_PHON#"> 
       <cfhttpparam name="CAPTURE_METHOD" type="formField" value="#CAPTURE_METHOD#"> 
       <cfhttpparam name="AID" type="formField" value="#AID#"> 
       <cfhttpparam name="SRLP" type="formField" value="#SRLP#"> 
       <cfhttpparam name="SCid" type="formField" value="#SCid#"> 
       <cfhttpparam name="BUYER_ID" type="formField" value="#BUYER_ID#"> 
       <cfhttpparam name="CID" type="formField" value="#CID#"> 
       <cfhttpparam name="PPCID" type="formField" value="#session.PPCID#"> 
      </cfoutput> 
     </cfhttp> 

я предполагаю, я хотел бы использовать httpRquest (мет: пост)? Но я не уверен.

+0

Этот блок кода не выполняет то, что вы описываете. Вы сказали: «У вас есть страница ColdFusion, которая добавляет URL-адрес с переменными формы», но этот блок этого не делает. Этот блок делает HTTP POST-запрос без полей формы. Он ничего не делает с переменными URL. –

+0

Извините, этот cfhttp POSTS преобразует переменные формы в указанный URL. Я хочу сделать то же самое на отдельной странице PHP. –

ответ

2

В PHP HTTP is intergrated as a so called stream wrapper­Docs. Это означает, что вы можете использовать его со стандартным File- и потоковыми функциями, связанными с:

$url = 'http://api.test.com/import-lead-data.php'; 
$result = file_get_contents($url); 

Это создаст стандартный запрос GET. Но вы хотите, чтобы запрос POST, поэтому вам нужно добавить некоторые context options­Docs:

$url = 'http://api.test.com/import-lead-data.php'; 
$options['http'] = array(
    'method' => "POST", 
);  
$context = stream_context_create($options);  
$result = file_get_contents($url, NULL, $context); 

Это сделает запрос POST вместо GET. Что еще не хватает, это поля формы. Предположим, у вас есть все поля в массиве ключей => пары значений:

$url = 'http://api.test.com/import-lead-data.php'; 
$content = http_build_query($form_fields);  
$options['http'] = array(
    'method' => "POST", 
    'content' => $content, 
);  
$context = stream_context_create($options);  
$result = file_get_contents($url, NULL, $context); 

Надеюсь, что это поможет. Естественно, вы также можете использовать функцию http_post_data или http_post_fields, если у вас ее есть.

См. Также: HEAD first with PHP Streams.

0

Расширение HTTP PECL (которое содержит класс HTTPRequest) не является частью установки PHP по умолчанию.

Я бы посмотрел на CURL: http://php.net/manual/en/book.curl.php. Вы можете установить HTTP-метод и параметры.

Или, если вы не возражаете против использования базы, проверка модуля HTTP Client Zend FW: http://framework.zend.com/manual/en/zend.http.html

Вот пример использования CURL сделать пост запрос: http://davidwalsh.name/execute-http-post-php-curl

+0

Как насчет использования http_post_data? –

+0

Это часть расширения PECL. Если вы работаете в среде, которая позволяет вам устанавливать модули PECL, тогда идите! Я стараюсь избегать этого, когда это возможно, потому что он делает код менее переносимым. –

+0

Как выглядит синтаксис http_post_data? –

Смежные вопросы