2016-08-24 7 views
2
curl -v -S -u devuser:devuser123 \ 
-F 'notification={"applicationId":"32768","schemaId":"32771","topicId":"32768","type":"USER"};type=application/json' \ 
-F [email protected] \ 
'http://localhost:8080/kaaAdmin/rest/api/sendNotification' 

Я попытался превратить его в PHP и закончил так:Преобразовать локон команда PHP Curl - kaaProject

$notification = array("applicationId" =>"32768", 
     "schemaId"=>"32771", 
     "topicId"=>"32768", 
     "type"=>"USER"); 
    $ch = curl_init(); 
    $headers = array(); 
    $headers[] = 'Authorization: Basic ZGV2dXNlcjpkZXZ1c2VyMTIz'; 
    $headers[] = 'Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryzeZR8KqAYJyI2jPL'; 
    curl_setopt($ch, CURLOPT_URL, 'http://localhost:8080/kaaAdmin/rest/api/sendNotification'); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, '3'); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, 'notification='.json_encode($notification).'&file='.realpath('notification.json')); 
    $content = curl_exec($ch); 
    print $content; 
    curl_close($ch); 

Я не знаю, как установить параметр «уведомление» и «файл». , пожалуйста, дайте мне решение.

Спасибо!

+0

Мы здесь, чтобы помочь вам, когда вы застреваете, пытаясь заставить код работать, а не писать код для вас. Сначала вам нужно приложить некоторые усилия. – aynber

+0

мое сообщение отредактировано, пожалуйста, помогите мне @aynber –

ответ

1

Я хотел бы предложить вам попробовать следующий код:

$notification = array("applicationId" =>"32768", 
      "schemaId"=>"32771", 
      "topicId"=>"32768", 
      "type"=>"USER" 
    ); 

    $ch = curl_init(); 

    $headers = array(); 
    $headers[] = 'Content-Type: multipart/form-data'; 

    curl_setopt($ch, CURLOPT_USERPWD, "devuser:devuser123"); 
    curl_setopt($ch, CURLOPT_URL, 'http://localhost:8080/kaaAdmin/rest/api/sendNotification'); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, '3'); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, array(
              'notification' => json_encode($notification), 
              'file' => '@' . 'notification.json' 
             )); 
    $content = curl_exec($ch); 
    print $content; 
    curl_close($ch); 

В основном этот код то же самое, как команда Баш вы предоставили, но с одним отличием - он не обеспечивает Content-Type для уведомления param.

Вместо

--------------------------5766b31cc6648aa7 
Content-Disposition: form-data; name="notification" 
Content-Type: application/json 

{"applicationId":"32768","schemaId":"32771","topicId":"32768","type":"USER"} 
--------------------------5766b31cc6648aa7 

посылает

--------------------------dd3a987c4561b96a 
Content-Disposition: form-data; name="notification" 

{"applicationId":"32768","schemaId":"32771","topicId":"32768","type":"USER"} 
--------------------------dd3a987c4561b96a 

Однако, я думаю, что это все-таки должен работать нормально. Если нет, вернитесь ко мне, и я дам вам другой сценарий, который не будет таким приятным и понятным, но будет работать.

================ UPDATE 1 ====================

Вот некрасиво сценарий, должны работать

function multipart_build_query($fields, $boundary){ 
    $retval = ''; 
    foreach($fields as $name => $v){ 
     $data = $v[0]; 
     $filename = (isset($v[1])) ? '; filename="' . $v[1] . '"' : ''; 
     $type = (isset($v[2])) ? 'Content-Type: ' . $v[2] . "\n" : ''; 

     $retval .= "--$boundary\n" . 
       "Content-Disposition: form-data; name=\"$name\"$filename\n$type\n" . 
       "$data\n"; 
    } 
    $retval .= "--$boundary--\n"; 
    return $retval; 
} 


    $notification = array("applicationId" =>"32768", 
     "schemaId"=>"32771", 
     "topicId"=>"32768", 
     "type"=>"USER"); 

    $post_data = array(
     'notification' =>  array(
             json_encode($notification), 
             null, 
             'application/json' 
           ), 
     'file' =>    array(
             file_get_contents('notification.json'), 
             'notification.json', 
             'application/octet-stream' 
           ) 
    ); 

    $boundary = md5(time() . mt_rand(1, 65536)); 


    $ch = curl_init(); 
    $headers = array(); 
    $headers[] = 'Content-Type: multipart/form-data; boundary=' . $boundary; 
    curl_setopt($ch, CURLOPT_USERPWD, "devuser:devuser123"); 
    curl_setopt($ch, CURLOPT_URL, 'http://localhost:8080/kaaAdmin/rest/api/sendNotification'); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, '3'); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, multipart_build_query($post_data, $boundary)); 
    $content = curl_exec($ch); 
    print $content; 
    curl_close($ch); 

----- UPDATE 2: Сырая запрос добавлен -----

POST /kaaAdmin/rest/api/sendNotification HTTP/1.1 
Host: localhost:8088 
Authorization: Basic ZGV2dXNlcjpkZXZ1c2VyMTIz 
User-Agent: curl/7.43.0 
Accept: */* 
Content-Length: 430 
Expect: 100-continue 
Content-Type: multipart/form-data; boundary=------------------------f03cb5aef819a622 

--------------------------f03cb5aef819a622 
Content-Disposition: form-data; name="notification" 
Content-Type: application/json 

{"applicationId":"32768","schemaId":"32771","topicId":"32768","type":"USER"} 
--------------------------f03cb5aef819a622 
Content-Disposition: form-data; name="file"; filename="notification.json" 
Content-Type: application/octet-stream 

asdasdasdad 

--------------------------f03cb5aef819a622-- 
+0

Спасибо за ваш андерсер, я попытался запустить ваш код, но не работал. Я по-прежнему получаю сообщение об ошибке «Уведомление об уведомлении запрашиваемой части» отсутствует ». пожалуйста, помогите мне с вашим скриптом differrent, еще раз спасибо. –

+0

Это печально. Я обновил свой первоначальный ответ с новым скриптом (его внизу). Проверьте это, пожалуйста. – sota

+1

hi @sota, вы делаете мой день :-D ваш скрипт будет работать нормально после добавления «\ r» в вашу функцию 'function multipart_build_query ($ fields, $ border) { \t $ retval = ''; \t foreach ($ fields as $ name => $ v) { \t \t $ data = $ v [0]; \t \t $ filename = (isset ($ v [1]))? «; filename = "'. $ v [1].'" ':' '; \t \t $ type = (isset ($ v [2]))? 'Тип содержимого: ' . $ v [2]. "\ r \ n": ''; \t \t $ retval. = "- $ border \ r \ n". \t \t "Content-Disposition: form-data; name = \" $ name \ "$ filename \ r \ n $ type \ r \ n"."$ Данных \ г \ п"; \t} \t $ retval. = "- $ border - \ r \ n"; \t return $ retval; } ' –

0

Можете ли вы поставить исходные данные заголовки и тело запроса вы получили с этот php-код? Я пытаюсь сделать то же самое в Csharp. Спасибо

+0

Привет! Отправленный необработанный запрос в моем первоначальном ответе выше. – sota

Смежные вопросы