2013-01-24 2 views
0

저는 업무용 애플리케이션을 설계하고 있습니다. 제공된 데이터를 받아 아래 제공된 양식에 삽입하고 자동으로 제출해야합니다. 다른 페이지에는 문제가 없으며, 로그인, 쿠키 저장, 읽기, 같은 사이트의 다른 링크로 이동할 수 있습니다. 내가 가지고있는 문제는 특히 양식의 페이지에서 컬이 실행되어 페이지를 가져 오지만 포스트 데이터가 전송되지 않습니다. (데이터가 배열로 전송되고 urlencoded 문자열도 전송됩니다) 생각할 수 있습니다. 양식이 구조화되는 방식에 문제가있을 수 있습니다 (아래 코드). 또한 양식이있는 사이트는 내 것이 아니지만 내가 물어 보는 헤더와 게시물 변수를 제공합니다.컬 변수 (php) 제출 양식을 제출하지 않았습니다.

시작하는 중입니다. 형태 :

<form action="newFault" method="GET" id="typeForm"> 
<div style="margin:5px"> 
Tip smetnje: 
<select name="type" id="type"> 
<option value="SVA" selected>SVA VA</option> 
<option value="SNBS">SNBS - NBSA</option> 
<option value="SULL">SULL - ULL</option> 
</select> 
</div> 
</form> 

<div> 
<form method="POST" action="createFault" enctype="multipart/form-data"> 
<input type="hidden" name="type" value="SVA"> 
<table class="tableLight" cellpadding="0" cellspacing="1" style="margin: 5px;"> 
<tr> 
<td colspan="2" style="text-align: right">Virtual account code:</td> 
<td><input name="accountCode" size="60"></td> 
<td></td> 
</tr> 

<tr> 
<th>konos</th> 
<th style="text-align: right">Kontakt osoba:</th> 
<td><input name="param.konos" size="60"></td> 
<td></td> 
</tr> 
<tr> 
<th>tel</th> 
<th style="text-align: right">Telefon:</th> 
<td><input name="param.tel" size="60"></td> 
<td></td> 
</tr> 
<tr> 
<th>tfx</th> 
<td style="text-align: right">Telefax:</th> 
<td><input name="param.tfx" size="60"></td> 
<td></td> 
</tr> 
<tr> 
<th>eml</th> 
<td style="text-align: right">E-mail:</td> 
<td><input name="param.eml" size="60"></td> 
<td></td> 
</tr> 
<tr> 
<th>vrkv</th> 
<th style="text-align: right">Vrsta:</th> 
<td><input name="param.vrkv" size="60"></td> 
<td></td> 
</tr> 
<tr> 
<th>lpb</th> 
<td style="text-align: right">Lokalni pozivni broj:</td> 
<td><input name="param.lpb" size="60"></td> 
<td></td> 
</tr> 
<tr> 
<th>idkod</th> 
<th style="text-align: right">nesto pristupa:</th> 
<td><input name="param.idkod" size="60"></td> 
<td></td> 
</tr> 
<tr> 
<th>ugbrz</th> 
<td style="text-align: right">brzina:</td> 
<td><input name="param.ugbrz" size="60"></td> 
<td></td> 
</tr> 
<tr> 
<th>iatk</th> 
<th style="text-align: right; ">Name:</th> 
<td><textarea name="param.iatk" cols="40" rows="3"></textarea></td> 
<td></td> 
</tr> 
<tr> 
<th>dkk</th> 
<td style="text-align: right">Datum koji odredi krajnji korisnik (ukoliko je to primjenjivo):</td> 
<td><input name="param.dkk" size="60"></td> 
<td></td> 
</tr> 
<tr> 
<th>opkv</th> 
<th style="text-align: right">Opis kvara:</th> 
<td><textarea name="param.opkv" cols="40"></textarea></td> 
<td></td> 
</tr> 
<tr> 
<th colspan="2" style="text-align: right">Dokumentacija u TIFF formatu:</th> 
<td><input type="file" name="attachment"></td> 
<td></td> 
</tr> 
<tr> 
<td colspan="2"></td> 
<td colspan="2"> 
<input type="submit" value="Pozovi"> 

PHP 번호 :

function saljipostom() 
{ 
$postdata = 'type=SVA&accountCode=101010&param.konos=osoba&param.tel=016000840&param.tfx=&param.eml=&param.vrkv=vrsta&param.lpb=&param.idkod=02637992641&param.ugbrz=&param.iatk=imekorisnika&param.dkk=&param.opkv=opis&attachment=&submit=Pozovi'; 
$fields = array(
'type'=>'SVA', 
'accountCode'=>'101010', 
'param.konos'=>'osoba', 
'param.tel'=>'016000840', 
'param.tfx'=>'', 
'param.eml'=>'', 
'param.vrkv'=>'vrsta', 
'param.lpb'=>'', 
'param.idkod'=>'02637992641', 
'param.ugbrz'=>'', 
'param.iatk'=>'imekorisnika', 
'param.dkk'=>'', 
'param.opkv'=>'opis', 
'attachment'=>'' 
); 
$polje = $fields; 
foreach ($fields as $key => $value) 
{ 
    $post_items[] = $key . '=' . urlencode($value); 
} 
$post_string = implode ('&', $post_items); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,"https://something.something/ui/ganimed/b2b/newFault?type=SVA"); 
curl_setopt($ch,CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0"); 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_POST, TRUE); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_COOKIEJAR, 'curl/cookies.txt'); 
curl_setopt($ch, CURLOPT_COOKIEFILE, 'curl/cookies.txt'); 

$result = curl_exec ($ch); 
curl_close ($ch); 
unset($ch); 

$page = str_get_html($result); 
echo $page; 
} 

출력 컬에서

응답 헤더 된 .js하는 반향된다

HTTP/1.1 200 OK Date: Thu, 24 Jan 2013 08:05:17 GMT Content-Type: text/html;charset=UTF-8 Content-Language: en-US Vary: Accept-Encoding Transfer-Encoding: chunked 

방화범 말한다 포스트 필드는 :

방화 IN

헤더

Response Headers 
Connection Keep-Alive 
Content-Language en-US 
Content-Length 0 
Content-Type text/plain 
Date Thu, 24 Jan 2013 12:52:46 GMT 
Keep-Alive timeout=15, max=100 
Location https://something.something/ui/something/b2b/faults?type=SVA&guid=40898022-1b33-42ab-a9f2-696cc5f70950 

요청 헤더

Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Encoding gzip, deflate 
Accept-Language en-us,en;q=0.5 
Connection keep-alive 
Cookie JSESSIONID=DD0148C1D1701FA237704C42DE093687.node1 
Host something 
Referer https://something.something/ui/something/something/newFault?type=SVA 
User-Agent Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0 

질문 : 데있어 문제는, 특히, 양식 페이지에서 발생하는 컬 실행하고 페이지를 가져, 하지만 게시물 데이터가 전송되지 않습니다. 양식을 받아들이지 않습니다 (데이터는 배열로 전송됩니다, 또한 urlencoded 문자열을 시도) 어떤 아이디어?

기타 문의 사항이 있으시면 언제든지 문의하십시오.

+0

나는 이것을 포기했습니다. 비슷한 상황에있는 사람이 있다면 컬을 사용하여 그 일을 포기할 것을 제안합니다. 아약스로 작성된 양식 때문에 컬로 해결할 수 없었습니다. 최근 비슷한 프로젝트가 있었지만 이번에는 파이썬/기계화로 작성했으며 매력처럼 작동했습니다. 그래서 파이썬은 갈 길입니다. – Notoc

답변

0

index.php 파일을 장소 다음 코드

$url = 'http://localhost/curltest/ind.php'; 

$paramsarray = array(
     'name' => '', 
     'age' => 24, 
); 

$params = $query = http_build_query($paramsarray, '', '&'); 



    $ch=curl_init($url); 
    curl_setopt_array($ch, array(
    CURLOPT_HEADER => false, 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_POST => true, 
    CURLOPT_POSTFIELDS => $params, 
)); 
$ress = curl_exec($ch); 

echo $ress; 

if(curl_exec($ch) === false) { 
     echo 0; 
} else { 
     echo 1; 
} 
curl_close ($ch); 
?> 

를 사용하여 URL에 게시 같은 프로젝트에

쓰기 다음을 배치 그 파일에있는 코드.

<?php 
print_r($_POST); 
?> 

은 index.php 파일을 실행하고 빈 포스트 필드가 컬을 사용하여 ind.php 페이지에 제출되는 것을 보여줍니다 어떤 출력
Array ([name] => [age] => 24) 1 

당신은 얻을 것이다.

+0

좋은 아이디어. 나는 집에 갈 때 그것을 시도 할 것이다. 그래서 그게 문제가되어서는 안됩니다. 그 밖의 어떤 시도를 할 수 있습니까? 내가 양식을 사용할 때 불량한 헤더를 게시하면 정상적인 양식에서 무슨 일이 일어나는지 알 수 있습니다. – Notoc

+0

알 겠어. 폼을 시험해보고 문제를 알아 내려고 노력해라. :) –

0
$url = 'http://foo.com/'; 

    $paramsarray = array(
      'name' => ' Test', 
      'age' => 24, 
      'preferences' => array(1,2,3,4,5,6) 
    ) 

$params = http_build_query($paramsarray); 


$ch = curl_init(); 
curl_setopt($ch, CURLOPT_POST,1); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$params); 
curl_setopt($ch, CURLOPT_URL,$url); 
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 

    if(curl_exec($ch) === false) { 
      echo 0; 
    } else { 
      echo 1; 
    } 

    curl_close ($ch); 

http_build_query() 함수를 사용하여 필요한 문자열 형식으로 배열을 만들 수 있습니다. 다음 지금 ind.php 이름 SECOD PHP 파일을 만들이 컬

+0

나는 배열과 함께 문자열로 전송하려했으나 두 경우 모두 반대하지 않았다. – Notoc

관련 문제