2013-07-19 4 views
1

Мне предоставлен пример кода из компании, с которой я имею дело, о том, как отправлять XML-данные в URL-адрес, а затем читать ответ. К сожалению для меня это в VBS, у которого у меня нет хороших рабочих знаний:Преобразование сценария VBS в PHP

Это часть кода, которая меня интересует. Это должно пройти через XML-файл, который был прочитан в oXML, затем опубликовать он и прочитать ответ:

set oHTTP = CreateObject("Microsoft.XMLHTTP") 
oHTTP.open "POST", "http://www.ophub.net/opxml/response.asp", false,00092,QW 'file url - with dealers Account number, Password 
oHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 
oHTTP.setRequestHeader "Content-Length", Len(sRequest) 
oHTTP.send oXML 

из того, что я понимаю это в PHP это можно сделать с помощью CURL и я придумал следующие из битов, которые я прочитал в Интернете, но это не работает, и я Не знаю, почему.

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: application/x-www-form- urlencoded")); 
curl_setopt($ch, CURLOPT_URL, "http://www.ophub.net/opxml/response.asp"); 
curl_setopt($ch, CURLOPT_USERPWD, "00092:QW"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "XML=" . $xml); 
$content=curl_exec($ch); 
echo $content; 

Я уверен, что я не могу быть далеко от того, что мне нужно, но я не могу показаться, чтобы получить там так что любой геп будет очень высоко ценится.

ответ

1

В ваших почтовых полях просто установить в XML нет необходимости устанавливать xml=

curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); 

вы также должны вернуть передачу истинного

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
+0

Я знал, что это будет что-то просто! Я люблю тебя!!!! :) –

+0

И ваше редактирование о возврате перевода было последним бит! Бесконечно благодарен! –

0

Он смотрит на меня, как это именно то, что вам нужно , Кажется, это точный перевод.

только два потенциальных проблем, которые я могу увидеть:

  • Вы PHP код, кажется, есть пространство, в середине значения в Content-Type заголовка, это будет, скорее всего, перерыв вещи
  • Вы будете, если вы еще этого не сделали, необходимо URL-адрес кодировать данные $xml перед отправкой его как часть сообщения application/x-www-form-urlencoded (ключ в имени типа: -P), который вы можете сделать с помощью urlencode().

Это может быть хорошей идеей, чтобы построить данные тела в виде строки и эхо его, чтобы убедиться, что данные правильны:

echo 'XML=' . urlencode($xml); 

Для сообщений XML записи оборачивания в application/x-www-form-urlencoded является ужасный способ сделать что-то. Но я столкнулся с несколькими API, которые это делают, поэтому я собираюсь предположить, что ваш код в этом отношении является правильным для API, который вы пытаетесь использовать.

+0

Это не точный перевод, в исходном коде нет сообщения с именем 'xml', – DevZer0

+0

@ DevZer0 Я предполагаю, что его элемент обрабатывается' oXML' в исходном коде, хотя этого может и не быть. Заголовок 'Content-Type' указал, что это может быть правильно, поэтому я предлагаю повторить строку body, чтобы убедиться, что данные - это то, что ожидает OP. – DaveRandom

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