2010-04-01 4 views
0

컬을 사용하여 페이지에 액세스하려고했습니다. 나는 그것이 완벽하게 브라우저를 사용하여 URL로 "정적"문자열을 사용처럼 액세스 할 수 있습니다 :왜 PHP Curl로 페이지를 가져올 때 400 Bad Request가 발생 했습니까?

$url = "http://www.example.com/?q=$param" 
:

$url = "http://www.example.com/?q=1234" 

하지만 같은 URL 문자열에 변수를 사용하여 페이지에 액세스하려고 할 때

400 오류 코드가 있습니다. 나는 웹에 체크 아웃 this 유래 스레드에서 여기에 몇 가지 의견을 발견

을 그리고, 단지 호기심에 대해 나는 다음과 같은 한 :

$url = "http://www.example.com/?q=" . trim($param); 

를하고 일했다! 그리고 아니요, $param에는 공백이 포함되지 않았습니다.

나에게 그것은 약간의 인코딩 오류 일 수있는 것 같지만 실제로 그것에 대한 설명을 찾을 수 없습니다. 여기에 stackoverflow에있는 사람이 그것이 될 수있는 일을 알고 있습니까? 사전 :

답변

3

당신이 공백을 포함하지 않은 100 % 확신하는 경우 글쎄, 다음 $param 아마 다른 문자 trim()cuts away with 중 하나 포함 :

  • "\의 t"(ASCII 9 (은 0x09)), 탭.
  • "\ n"(ASCII 10 (0x0A)), 새 줄 (줄 바꿈).
  • "\ r"(ASCII 13 (0x0D)), 캐리지 리턴.
  • "\ 0"(ASCII 0 (0x00)), NUL 바이트.
  • "\ x0B"(ASCII 11 (0x0B)), 수직 탭.

당신은 ord()를 사용하여 확실하게 알아낼 수 :

$string = "\nTEST\r"; 
for ($i = 0; $i <= strlen($string)-1; $i++) 
echo "(".ord($string[$i]).")"; 

이 코드를 출력 보이지 않는 문자를 포함한 문자열의 모든 문자 값 :

(10)(84)(69)(83)(84)(13) 

10 beingh 문자열의 시작 부분에있는 개행 문자입니다.

0

에서

덕분에 아마 웹 사이트는 그래서 아마 웹 사이트와 파이어 폭스와 같은 클라이언트 브라우저 값으로 리퍼러 값을 추가하려고, 외부 요청을 거부합니다. 어쩌면 그것을 속일 수 있고 요청을 수락 할 수 있습니다.

0

할당 후 $ url 변수를 출력하는 것이 가장 좋습니다. 그렇게하면 그 안에있는 것을 정확히 볼 수 있습니다.

관련 문제