как передать значение URL в curl php - PullRequest
0 голосов
/ 22 июля 2009
$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 http://www.mydata.com? Test = 1 ".

я потерял описание после '&'

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

Ответы [ 4 ]

0 голосов
/ 23 февраля 2018

Это простое решение. Если вы работаете над 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);
0 голосов
/ 23 апреля 2012

Легко. Вы можете просто получить текущий 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

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

0 голосов
/ 12 сентября 2017

Поместите данные для записи в массив и используйте этот массив в качестве 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 голосов
/ 22 июля 2009

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

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

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

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

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

...