2009-07-22 4 views
0
$description = "some test data and url"; 
$description .="http://www.mydata.com?test=1&user=4&destination=645&source=stackoverflow"; 

curl_setopt($sch, CURLOPT_URL, "myserverurl"); 
curl_setopt($sch, CURLOPT_HEADER, 0);    
curl_setopt($sch, CURLOPT_POST, true); 
curl_setopt($sch, CURLOPT_RETURNTRANSFER , 1); 
curl_setopt($sch, CURLOPT_POSTFIELDS, "orgid=$orgid&description=$description&external=1"); 
curl_setopt ($sch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt ($sch, CURLOPT_SSL_VERIFYPEER, 0); 

когда я проверяю сервер (myserverurl).как передать значение url в curl php

Я могу видеть поле описания как

«некоторые тестовые данные и URL http://www.mydata.com?test=1».

я потерял описание после того, как «&»

да, мы можем кодировать URL перед отправкой с завитком, но я не имею доступа для декодирования URL снова на этом сервере апите третью стороны

+0

Если вы rawurlencode() URL-адрес перед его отправкой, какое значение вы получаете на сервере для поля описания? – FWH

+0

Возможно, вы захотите рассмотреть http://us2.php.net/http_build_query –

ответ

0

Что если вы urlencodeзначение каждого параметра, который вы отправляете?

Вам не придется беспокоиться о декодировании с другой стороны: это стандартный способ передачи данных через GET/POST

Что-то вроде:

curl_setopt($sch, CURLOPT_POSTFIELDS, 
    "orgid=" . urlencode($orgid) 
    . "&description=" . urlencode($description) 
    . "&external=1" 
); 

И если это не работает , попробуйте с rawurlencode? (есть разница в пробелах, если я правильно помню)

+2

Или вы можете использовать http://php.net/http_build_query, что гораздо удобнее. – Salaryman

+1

действительно; намного лучше/проще; и менее подвержены ошибкам –

0

Легко. Вы можете просто получить текущий URL после его ввода.

Так что, если вы вводите

http://www.mydata.com?test=1&user=4&destination=645&source=stackoverflow 

(я предполагаю, что mydata.com ваш сервер), вы можете повторить его очень легко:

$url = str_replace("?","",$_SERVER['REQUEST_URI']); 
echo $url; 

И выше эхо должно дать:

test=1&user=4&destination=645&source=stackoverflow 

С этого момента вы можете просто сохранить всю строку в базе данных или сохранить отдельные переменные (test, user, destination, source) на either $_SERVER['test'], или, если их количество варьируется, вы можете взорвать их на символ &, чтобы сохранить их динамически.

0

Поместите данные для сообщения в массив и используйте этот массив как ваш CURLOPT_POSTFIELDS. Вы можете получить описание в $_POST['description'].

Пример
test.php

<?php 
$sch = curl_init(); 
$post_data=array(); 
$orgid='testorg'; 
$description = "some test data and url"; 
$description .="http://www.mydata.com?test=1&user=4&destination=645&source=stackoverflow"; 
$post_data['description']=$description; 
$post_data['orgid']=$orgid; 
$post_data['external']=1; 
curl_setopt($sch, CURLOPT_URL, "localhost/testcurl.php"); 
curl_setopt($sch, CURLOPT_HEADER, 0);    
curl_setopt($sch, CURLOPT_POST, true); 
curl_setopt($sch, CURLOPT_RETURNTRANSFER , 1); 
curl_setopt($sch, CURLOPT_POSTFIELDS, $post_data); 
$re=curl_exec($sch); 

echo('<pre>'); 
echo($re); 

testcurl.php

<?php 
var_dump($_POST); 

результат

array(3) { 
    ["description"]=> 
    string(94) "some test data and urlhttp://www.mydata.com?test=1&user=4&destination=645&source=stackoverflow" 
    ["orgid"]=> 
    string(7) "testorg" 
    ["external"]=> 
    string(1) "1" 
} 
0

Это простое решение.Если вы работаете на использование PHP функции curl_escape() `

$msg=$_POST['Message']; 

$ch = curl_init(); 
$new = curl_escape($ch, $msg); 


$ch = curl_init("url".$new."/xyz.com"); 
$fp = fopen("example_homepage.txt", "w"); 

curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HEADER, 0); 

curl_exec($ch); 
curl_close($ch); 
fclose($fp); 

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

  • Нет связанных вопросов^_^