开发者

shell_exec escaping quotes in php for Twitter API --> Getting CURL to work with obscure twitter api method

I'm using shell_exec() to execute a Twitter API Call.

shell_exec('curl -u user:password -d "id=3191321" http://api.twitter.com/1/twitterapi/twitterlist/members.xml');

That works fine when I authenticate correctly and put in a number for the id.

But when I try to put in a variable ($id), it screws up.

$addtolist = shell_exec('curl -u user:pw -d "id='.$id.'" http://twitter.com/username/twitterlist/members.xml');

I tried flipping the quote types

$addtolist = shell_exec("curl -u user:pw -d 'id=$id' http://twitter.com/username/twitterlist/members.xml");

I tried using double quotes and escaping them

$addtolist = shell_exec("curl -u user:pw -d \"id=$id\" http://twitter.com/username/twitterlist/members.xml");

None of them worked.

What am I doing wrong?

EDIT: The purists say I should be using PHP's built in curl methods, not the shell_exec. That's not working either.

$url = 'http://twitter.com/user/list/members.xml';

// Set up and execute the curl process

$curl_handle = curl_ini开发者_StackOverflow社区t();

curl_setopt($curl_handle, CURLOPT_URL, "$url");

curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);

curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl_handle, CURLOPT_POST, 1);

curl_setopt($curl_handle, CURLOPT_POSTFIELDS, "id=$id");

curl_setopt($curl_handle, CURLOPT_USERPWD, "user:pw");

$buffer = curl_exec($curl_handle);

curl_close($curl_handle);

It returns bool(false), and doesn't properly update the Twitter List in question (the whole point of the exercise)


Try printing the string echo "curl -u pxlist:Weekend1 -d 'id=$id' http://twitter.com/username/twitterlist/members.xml"; and see what it says. Probably there's something wrong with $id. How is it initialized?


Have you tried :

shell_exec("curl -u user:password -d \"id=" .$id. "\" http://api.twitter.com/1/twitterapi/twitterlist/members.xml");

and as Filip suggested are you sure that $id is initialized, try echoing before executing .. try this above if $id is initialized


use escapeshellarg() to properly encode $id for a command line argument.

$addtolist = shell_exec('curl -u user:pw -d '.escapeshellarg("id=$id").' http://twitter.com/username/twitterlist/members.xml');

(i realize this question is old, 8 years old as of writing, but nobody provided the correct solution.)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜