curlにおけるpostパラメータ問題の注記

2622 ワード

public function translate($srcLan,$tgtLan,$srcSen){
		header("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
		header("Content-Type","application/x-www-form-urlencoded"); 
		header("accept", "*/*");        
		header("Connection", "Keep-Alive");
		
		if($srcSen == '' || !in_array($srcLan,$this->lang_type) || !in_array($tgtLan,$this->lang_type)){
			return false;
		}
		if($srcLan == $tgtLan){
			return false;
		}
		//    
		$encode = mb_detect_encoding($srcSen, "auto");
		if ($encode != 'UTF-8'){
			if($encode == 'GB2312'){
				$encode = "GB2312//IGNORE";
			}
			$srcSen = iconv($encode,'UTF-8',$srcSen);
		} 
		
		//CURL GET     
		// $get_url = $this->url . '&srcLan=' .$srcLan. '&tgtLan=' .$tgtLan. '&srcSen=' .urlencode($srcSen) ;
		// $ch = curl_init ();
		// curl_setopt ( $ch, CURLOPT_URL, $get_url);
		// curl_setopt ( $ch, CURLOPT_HEADER, 0 );
		// curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
		// $content = curl_exec ( $ch );
		// $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //   http   
		// curl_close ( $ch );
		// if($status_code == '500'){
			// return false;
		// }
		
		//CURL POST   
		// $data = array(
				// 'ID' => $this->TRANSLATE_USER,
				// 'PW' => $this->TRANSLATE_PASSWD,
				// 'srcLan' => $srcLan,
				// 'tgtLan' => $tgtLan,
				// 'srcSen' => urlencode($srcSen)
		// );//data                 ,              ,   
		
		$data = 'ID='.urlencode($this->TRANSLATE_USER);
		$data .= '&PW='.urlencode($this->TRANSLATE_PASSWD);
		$data .= '&srcLan='.urlencode($srcLan);
		$data .= '&tgtLan='.urlencode($tgtLan);
		$data .= '&srcSen='.urlencode($srcSen);
		
		$ch = curl_init ();
		curl_setopt ( $ch, CURLOPT_URL, $this->url );
		curl_setopt ( $ch, CURLOPT_POST, 1 );
		curl_setopt ( $ch, CURLOPT_HEADER, 0 );
		curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
		curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );
		$content = curl_exec ( $ch );
		$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //   http   
		curl_close ( $ch );
		if($status_code == '500'){
			return false;
		}
		
		return $content;	
	}

最近、翻訳機能を書いていますが、インタフェースはサードパーティが提供しているので、ここでは翻訳クラスをカプセル化する必要があります.
curlリクエストurlリソースを用いてget方式は簡単に成功したが,post方式はpostの配列を文字列形式に変更するまで成功しなかった.
具体的なコードは上記の通りです.
誰か説明してくれてありがとう.