PHP Socket连接到API

时间:2017-07-27 23:14:22

标签: php web-services sockets

我正在尝试使用PHP套接字连接到API。

我在很多方面都尝试过,但我无法让它发挥作用。我知道还有其他答案,但没有人有效。我真的无法实现它。我正在尝试至少两天。

这是错误:

  

php_network_getaddresses:getaddrinfo failed:名称或服务未知

代码(套接字 - 它不起作用):

public Form1()
    {
        InitializeComponent();
        this.Shown += MainWindow_Loaded;
    }

    void MainWindow_Loaded(object sender, EventArgs e)
    {

        using (var ws = new WebSocket("ws://169.254.101.183"))
        {
            ws.OnMessage += (sender2, e2) =>
                textBox1.Text = e2.Data.ToString();

            ws.Connect();
            ws.OnOpen += (sender2,e2) =>
                textBox1.Text = "connected";

            /*ws.OnError += (sender2, e2) =>
                textBox1.Text = e2.Message;*/

            //textBox1.Text = ".";
        }
    }

Code(Curl - It Works!):

var $url = 'api.site.com.br/';

public function getUsers(){

    $path = "users/?accesstoken=c24f506fe265488435858925096bc4ad7ba0";
    $packet= "GET {$path} HTTP/1.1\r\n";
    $packet .= "Host: {$url}\r\n";
    $packet .= "Connection: close\r\n";

    if (!($socket = fsockopen($this->url,80,$err_no,$err_str))){
      die( "\n Connection Failed. $err_no - $err_str \n");
    }

    fwrite($socket, $packet);
    return stream_get_contents($socket);
}

我无法向您提供正确的URL,但URL正在使用Curl,因此它应该适用于套接字。

2 个答案:

答案 0 :(得分:1)

通过套接字连接到主机未连接到URL。

错误:api.site.com.br/

错误:http://api.site.com.br/

错误:https//api.site.com.br/api/

右: api.site.com.br

您连接到主机。这可以是域名或IP。这些都没有斜线。

答案 1 :(得分:0)

我通过以下方式解决了这个问题:

public function getUsers(){
    $path = "users/?accesstoken=c24f506fe265488435858925096bc4ad7ba0";
    $fp = fsockopen($this->url, 80, $errno, $errstr, 30);
    if (!$fp) {
        echo "$errstr ($errno)<br />\n";
    } else {
        $out = "GET /{$path} HTTP/1.1\r\n";
        $out .= "Host: {$this->url}\r\n";
        $out .= "Connection: Close\r\n\r\n";
        fwrite($fp, $out);
        while (!feof($fp)) {
            echo fgets($fp, 128);
        }
        fclose($fp);
    }
}