首页 文章

shell_exec在php中为Twitter API转义引号 - >让CURL与晦涩的twitter api方法一起使用

提问于
浏览
0

我正在使用shell_exec()来执行Twitter API调用 .

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

当我正确验证并输入id的数字时,这工作正常 .

但是当我尝试输入变量($ id)时,它会搞砸 .

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

我尝试翻转报价类型

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

我尝试使用双引号并转义它们

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

他们都没有工作 .

我究竟做错了什么?

编辑:纯粹主义者说我应该使用PHP的内置卷曲方法,而不是shell_exec . 这也不起作用 .

$ url ='http://twitter.com/user/list/members.xml'; //设置并执行curl进程$ curl_handle = curl_init(); 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);

它返回bool(false),并且没有正确更新有问题的Twitter列表(练习的全部内容)

3 回答

  • 1

    使用escapeshellarg()来正确编码命令行参数的$ id .

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

    (我意识到这个问题很古老,写作时已经8岁了,但是没有人提供正确的解决方案 . )

  • 0

    尝试打印字符串 echo "curl -u pxlist:Weekend1 -d 'id=$id' http://twitter.com/username/twitterlist/members.xml"; 并查看其内容 . $id 可能有问题 . 它是如何初始化的?

  • 0

    你有没有尝试过 :

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

    并且正如Filip建议你确定$ id被初始化,在执行之前尝试回显..如果$ id被初始化,请尝试以上

相关问题