2010-08-20 7 views
10

160by2과 같은 웹 사이트에서 모바일로 SMS를 보내기위한 웹 응용 프로그램을 개발 중입니다.PHP에서 GET 메서드로 HTTP 요청을 다른 웹 사이트에 보내는 방법

SMS 게이트웨이 공급자 smslane.com에서 제공하는 API에서 설명한대로 HTTP GET 요청에 필요한 URL을 준비 할 수 있습니다 (여기에는 link for the API).

PHP에서 HTTP 요청을 보내는 방법은 무엇입니까?

그 목적으로 cURL을 사용했지만 응답이 표시되지 않습니다. 저는 여기에 사용되는 코드, 알 수없는 포트 번호, 포트 번호에 대한 지원 팀에 우편으로 발송하기 때문에

<?php 
$url="http://smslane.com/vendorsms/pushsms.aspx?user=abc&password=xyz&msisdn=919898123456&sid=WebSMS&msg=Test message from SMSLane&fl=0"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1"); 
curl_setopt($ch, CURLOPT_URL, $url); 
$content = curl_exec($ch); 
$response = curl_getinfo($ch); 
curl_close ($ch); 
echo $content; 
?> 

fsockopen()

를 사용하지 않은입니다. (fsockopen에 대한 코드가 GET 메소드를 통해 초대 된 경우 :).)

다른 방법이 있습니까?

어떤 도움을 환영합니다.

미리 감사드립니다.

편집

이 하나가 말해 줄 수있는 가능한주고 코드 를 제외하고는 경우이 HTTP 요청을 보낼 수있는 다른 방법이있다.

현재 cURL 코드가 실행에 너무 많은 시간이 걸리고 60 초 후에 실패하기 때문에이 문제가 발생합니다. 내 로컬 시스템에서 max_execution_time을 120까지 증가 시켰습니다. . 내가 바로 배웅 수있는 코드를 잘못

+0

무엇이야 URL이 맞습니까? 사용자 이름과 암호가 제대로 표시되는지 확인하십시오 실수로 기형의 요청을 보낼 수 있습니다 – Shabbyrobe

+0

@webdestroya 내가 가지고있는 경우 답변을 수락 할 수 있습니다 :) – srinivas

+0

@Shabbyrobe 질문이 업데이트되었는지 확인하십시오. 여기에 나는 더미 세부 정보를 제공했지만 실제 세부 정보는 주어진 웹 사이트의 제어판에서 SMS를 보낼 수 있습니다. – srinivas

답변

11

문제는 사용자가 당황하게하는 방식입니다 URL을 생성합니다. 쿼리 문자열에 포함 할 공백은 잘못된 요청 URL이 전송되게합니다.

request.php :

<?php 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_URL, 
    'http://your_server/response.php?foo=yes we can&baz=foo bar' 
); 
$content = curl_exec($ch); 
echo $content; 

response.php :

<?php 
print_r($_GET); 

가 request.php의 출력은 여기

는 상황을 복제 예는 :

Array 
(
    [foo] => yes 
) 

이유는 쿼리 문자열이 제대로 인코딩되지 않아서 요청을 해석하는 서버가 URL이 첫 번째 공간 (이 경우 쿼리 중간에 있음)으로 끝나는 것으로 가정하기 때문입니다. foo=yes we can&baz=foo bar.

당신은 제대로 쿼리 문자열에는 urlencoding 처리됩니다 http_build_query를 사용하여 URL을 구축해야하고 더 읽기를 많이 보면 일반적으로 코드합니다 :

echo http_build_query(array(
    'user'=>'abc', 
    'password'=>'xyz', 
    'msisdn'=>'1234', 
    'sid'=>'WebSMS', 
    'msg'=>'Test message from SMSLane', 
    'fl'=>0 
)); 

당신은 또한 CURLOPT_RETURNTRANSFER을 설정해야합니다

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
+0

+1 매우 아주 좋은 설명 나는 당신의 제안을 확인하겠습니다 – srinivas

+0

내 질문의 편집을 확인하시기 바랍니다 수 있습니다. 제발 .. – srinivas

+0

이 도움에 감사드립니다. 나는 내 문제를 해결했기 때문에 이것을 대답으로 받아 들인다. – srinivas

6
<?php 
print file_get_contents("http://some_server/some_file.php?some_args=true"); 
?> 
+0

루크가 내가 이것을 시도 할 수있다. :) – srinivas

1

아무것도. 당신이 응답을 볼 수 있도록? 당신도 파일에 대한 응답을 다운로드 wget을 사용할 수 브라우저에 URL을 붙여 노력했다. I를 fsocket을 시도해보고 포트 80을 기본 http 포트로 사용하려고한다고 가정 할 경우

+0

@AIW 나는 브라우저에서 URL을 시도하고 응답 메시지를 보냈다. – srinivas

+0

URL 인코딩을 수행하지 않았을 수 있습니다. 또한 returntransfer를 true로 설정하십시오. –

1

다음 코드를 사용해보십시오.

$r = new HttpRequest('http://www.xencomsoftware.net/configurator/tracker/ip.php', HttpRequest::METH_GET); 
try { 
     $r->send(); 
     echo $r->getResponseCode(); 
     if ($r->getResponseCode() == 200) 
     { 
     } 
    } 

는 서버에서 HttpRequest를 확장 (공유 object0를 넣었는지 확인합니다.

+0

정보를 제공해 주셔서 감사합니다.이 확장 프로그램에 대해 전혀 알지 못했습니다. –

+0

내 시스템/서버에서 HTTPRequest 확장을로드하는 방법은 무엇입니까? 그 방법을 시도했지만 확장 기능이로드되지 않았습니다. 나는 그 확장 기능을 설치하는 방법을 알 수 없었다. – srinivas

2

는 아래의 코드는 곱슬 HTTP 요청을하고 $content의 응답을 반환합니다.

<?php 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_URL,'http://www.anydomain.com/anyapi.php?a=parameters'); 
$content = curl_exec($ch); 
echo $content; 
?> 
관련 문제