1

助けてください。PHP 経由で tableau サーバーからチケットを取得しようとしています。現在、私の ISP とサーバーの IP アドレスは、Tableau サーバーで信頼できる IP としてリストされています。リモートサーバーで JavaScript を使用するとチケットを取得できますが、何らかの理由で PHP で結果を取得できず、さまざまな PHP コードスニペットを試しました。それらのいずれかを機能させることができれば、喜んでスプリットを行います。

注意: JavaScript バージョンでは、ユーザー名と同じ target_site を入力する必要があります。そうしないと、結果が得られません。URL の末尾にある :8000 ポートにも注意してください。

これは動作中の html/javascript バージョンです (有効なチケットを返します。例: 128018285):

<script type="text/javascript">
function submitForm(){document.getElementById('form1').action = document.getElementById('server').value + "/trusted";}
</script>                      
<form method="POST" id="form1" onSubmit="submitForm()">
    <table class="style1">
        <tr>
            <td class="style2">
                Username:</td>
            <td>
                <input type="text" name="username" value="" /></td>
        </tr>
        <tr>
            <td class="style2">
                Server: </td>
            <td>
                <input type="text" id="server" name="server" value="http://" /></td>
        </tr>
        <tr>
            <td class="style2">
                Client IP (optional):</td>
            <td>
                 <input type="text" id="client_ip" name="client_ip" value="" /></td>
        </tr>
        <tr>
            <td class="style2">
                Site: (leave blank for Default site, else NameOfSite if using sites)</td>
            <td>
                <input type="text" id="target_site" name="target_site" value="" /></td>
        </tr>
        <tr>
            <td class="style2">
                        <input type="submit" name="submittable" value="Go" /></td>
            <td>
                 </td>
        </tr>
    </table>
</form>

ここに私のコード、スニペット1がfile_get_contentsを使用しています

$remote_addr = $_SERVER['REMOTE+ADDR'];  
  $params = array(
    'username' => 'myusername',
    'client_ip' => $remote_addr,
    'target_site' => 'myusername'
   );

    $context = stream_context_create($params);
    $ticket = file_get_contents('http://mysite.com:8000/trusted', false, $context);

  if ($ticket > 0) {
     return $ticket;
  }
  else
    return 0;

curl を使用した別のコード スニペット

$server = 'myserver.com:8000';
$url = 'http://'.$server.'/trusted';
$fields_string ='target_site=myusername&username=myusername';

$ch = curl_init();      
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept-Encoding: gzip'));
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);

return curl_exec($ch);      
curl_close($ch);

fopen を使用した別のコード スニペット

$url = 'http://myserver.com:8000/trusted';
$data = array ('username' => 'myusername','target_site' => 'myusername', 'format' => 'txt');
$data = http_build_query($data);
$params = array('http' => array(
                        'method' => 'POST',
                        'content' => $data,
                         'header'  => 'Content-type: application/x-www-form-urlencoded' . "\r\n"
              .'Accept-Encoding:' . "\r\n"
                    ));
        if($optional_headers != null)
        {
            $params['http']['header'] = $optional_headers;
        }
        $ctx = stream_context_create($params);
        $fp = @fopen($url, 'rb', false, $ctx);
        if (!$fp)
        {
            throw new Exception("Problem with $url, $php_errormsg");
        }
        $response='';
        while (!feof($fp))
        {
            $response = $response.fgets($fp);
        }
        if ($response === false)
        {
            throw new Exception("Problem reading data from $url, $php_errormsg");
        }

        fclose($fp);
        return $response;

よろしくお願いします...

4

3 に答える 3

0

申し訳ありませんが、私の Web ホストがポート 8000 をブロックしていたようです。これが原因で、コードが機能していませんでした。

参考までに、これは自分自身、myusername、mytargetsite、http: //example.com/trusted の変数を変更する最も簡潔なコードです。

$opts = array('http' =>
array(
    'method'  => 'POST',
    'header'  => 'Content-type: application/x-www-form-urlencoded',
    'content' => 'username=myusername&target_site=mytargetsite'
)
);

$context  = stream_context_create($opts);

$result = file_get_contents('http://example.com/trusted', false, $context);

if ($result === false) {

throw new Exception("Problem reading data from $url, $php_errormsg");
}

else echo $result;
于 2013-10-11T02:43:38.090 に答える