ホームページ  >  記事  >  バックエンド開発  >  PHP は URL 経由でアクセスし、新しい URL を取得する方法 [Baidu Map の呼び出し]

PHP は URL 経由でアクセスし、新しい URL を取得する方法 [Baidu Map の呼び出し]

WBOY
WBOYオリジナル
2016-06-23 13:55:201263ブラウズ

モバイル WeChat でナビゲーションを実行したいです
現在のナビゲーション URL アドレスを IE アドレスバーに入力すると、正常にアクセスできます: http://api.map.baidu.com/direction?origin=latlng:24.481428 , 118.124813|name:Test starting point&destination=latlng:24.503361,118.139877|name:Testing end point&mode=driving®ion=Xiamen&output=html

入力後、Enter を押すと、アドレスが次のように変更されたことがわかります:
http://map .baidu.com /?l=&s=nav%26sn%3D1%24%24%24%2413149737.11%2C2794316.21%24%24%E6%B5%8B%E8%AF%95%E8%B5%B7% E7%82% B9%24%24%24%24%24%24%26en%3D1%24%24%24%2413151414.05%2C2796984.18%24%24%E6%B5%8B%E8%AF%95% E7%BB% 88%E7%82%B9%24%24%24%24%24%24%26sc%3D194%26ec%3D194

に基づいてリクエストした後、PHP を使用して新しい URL を取得する方法を知りたいです元のURLは?ありがとう。






ディスカッションへの返信 (解決策)

トランスコードの理由は、中国語の文字が含まれているためです。WeChat で、IPHONE ナビゲーション ページが開けず、空白であることがわかりました。
ただし、URL 経由でリクエストした後に取得した新しい URL が WeChat で設定されている場合は、Baidu Map を正常に開くことができます。

それで、これを処理する関数を書きたいのですが、アドバイスをお願いします。ありがとうございます。

元の URL は http://api.map.baidu.com/direction?origin=latlng:24.481428,118.124813|name:test starting point&destination=latlng:24.503361,118.139877|name:test endpoint&mode=driving®ion=Xiamen &output= html

新しい URL は http://map.baidu.com/?l=&s=nav%26sn%3D1%24%24%24%2413149737.11%2C2794316.21%24%24%E6%B5% 8B% E8%AF%95%E8%B5%B7%E7%82%B9%24%24%24%24%24%24%26en%3D1%24%24%24%2413151414.05%2C2796984.18%24% 24% E6%B5%8B%E8%AF%95%E7%BB%88%E7%82%B9%24%24%24%24%24%24%26sc%3D194%26ec%3D194

新しい URL を使用してくださいと入力しても機能しません。

では、root??URL を取得して、それを使用しますか?

元の URL は http://api.map.baidu.com/direction?origin=latlng:24.481428,118.124813|name:test starting point&destination=latlng:24.503361,118.139877|name:test endpoint&mode=driving®ion= アモイ&output= html

新しい URL は http://map.baidu.com/?l=&s=nav%26sn%3D1%24%24%24%2413149737.11%2C2794316.21%24%24%E6%B5 %8B% E8%AF%95%E8%B5%B7%E7%82%B9%24%24%24%24%24%24%26en%3D1%24%24%24%2413151414.05%2C2796984.18%24 %24% E6%B5%8B%E8%AF%95%E7%BB%88%E7%82%B9%24%24%24%24%24%24%26sc%3D194%26ec%3D194

新しい URL を使用してください開くことはできますが、URLがありません???

では、root??URL を取得して、それを使用しますか?



お兄さん、そういう意味です。古いURLから新しいURLを生成するようなものです。
ありがとうございました。

rree

<?php$url = 'http://api.map.baidu.com/direction?origin=latlng:24.481428,118.124813|name:测试起点&destination=latlng:24.503361,118.139877|name:测试终点&mode=driving&region=厦门&output=html';$newurl = getMapUrl($url);echo $newurl;function getMapUrl($url){    $result = get_headers($url, true);    return isset($result['Location'])? $result['Location'] : '';}?>



兄弟、返信ありがとう。
しかし、私は Sina SAE を使用しているので、次のプロンプトが表示されます:
警告: get_headers() はセキュリティ上の理由から test.php の 7 行目で無効になっています


get_headers() それを置き換える他の方法はありますか?ありがとう。

试试.

$url = 'http://api.map.baidu.com/direction?origin=latlng:24.481428,118.124813|name:测试起点&destination=latlng:24.503361,118.139877|name:测试终点&mode=driving&region=厦门&output=html';$newurl = getMapUrl($url);echo $newurl;function getMapUrl($url){    file_get_contents($url);    $result = $http_response_header;    if($result){        foreach($result as $val){            if(substr($val,0,10)=='Location: '){                return str_replace('Location: ','', $val);            }        }    }    return '';}


禁用的函数:

php_real_logo_guid
php_egg_logo_guid
readlink
linkinfo
symlink
link
set_file_buffer
exec
system
escapeshellcmd
escapeshellarg
passthru
shell_exec
proc_open
proc_close
proc_terminate
proc_get_status
proc_nice
getmyuid
getmygid
getmyinode
putenv
getopt
sys_getloadavg
getrusage
get_current_user
magic_quotes_runtime
set_magic_quotes_runtime
import_request_variables
debug_zval_dump
ini_alter
dl
pclose
popen
stream_socket_client
stream_socket_server
stream_socket_accept
stream_socket_pair
stream_get_transports
stream_wrapper_restore
get_headers
mail
mb_send_mail
openlog
syslog
closelog
apc_add
apc_bin_dump
apc_bin_dumpfile
apc_bin_load
apc_bin_loadfile
apc_cache_info
apc_cas
apc_clear_cache
apc_compile_file
apc_dec
apc_define_constants
apc_delete_file
apc_delete
apc_exists
apc_fetch
apc_inc
apc_load_constants
apc_sma_info
apc_store
flock
pfsockopen
posix_kill
apache_child_terminate
apache_get_modules
apache_get_version
apache_getenv
apache_lookup_uri
apache_reset_timeout
apache_response_headers
apache_setenv
virtual
mysql_pconnect
socket_create
socket_create_pair
禁用的类:

SQLiteDatabase
SQLiteResult
SQLiteUnbuffered
SQLiteException
APCIterator

urlencode?

试试.

$url = 'http://api.map.baidu.com/direction?origin=latlng:24.481428,118.124813|name:测试起点&destination=latlng:24.503361,118.139877|name:测试终点&mode=driving&region=厦门&output=html';$newurl = getMapUrl($url);echo $newurl;function getMapUrl($url){    file_get_contents($url);    $result = $http_response_header;    if($result){        foreach($result as $val){            if(substr($val,0,10)=='Location: '){                return str_replace('Location: ','', $val);            }        }    }    return '';}


禁用的函数:

php_real_logo_guid
php_egg_logo_guid
readlink
linkinfo
symlink
link
set_file_buffer
exec
system
escapeshellcmd
escapeshellarg
passthru
shell_exec
proc_open
proc_close
proc_terminate
proc_get_status
proc_nice
getmyuid
getmygid
getmyinode
putenv
getopt
sys_getloadavg
getrusage
get_current_user
magic_quotes_runtime
set_magic_quotes_runtime
import_request_variables
debug_zval_dump
ini_alter
dl
pclose
popen
stream_socket_client
stream_socket_server
stream_socket_accept
stream_socket_pair
stream_get_transports
stream_wrapper_restore
get_headers
mail
mb_send_mail
openlog
syslog
closelog
apc_add
apc_bin_dump
apc_bin_dumpfile
apc_bin_load
apc_bin_loadfile
apc_cache_info
apc_cas
apc_clear_cache
apc_compile_file
apc_dec
apc_define_constants
apc_delete_file
apc_delete
apc_exists
apc_fetch
apc_inc
apc_load_constants
apc_sma_info
apc_store
flock
pfsockopen
posix_kill
apache_child_terminate
apache_get_modules
apache_get_version
apache_getenv
apache_lookup_uri
apache_reset_timeout
apache_response_headers
apache_setenv
virtual
mysql_pconnect
socket_create
socket_create_pair
禁用的类:

SQLiteDatabase
SQLiteResult
SQLiteUnbuffered
SQLiteException
APCIterator




兄弟,给力啊。100分都给你了。结贴,哈。
谢谢。

看的晚了,还找了一个,顺便分享。
private function getHeadersNew($url){ $ch= curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_NOBODY, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 1); $f=curl_exec($ch); curl_close($ch); $h=explode("\n",$f); $r=array(); foreach( $h as $t){   $rr=explode(":",$t,2);   if(count($rr)==2 ){ $r[$rr[0]]=trim($rr[1]);} } return $r; } 


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。