Неправильная подпись при попытке перевода файла в curl на C # - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь загрузить файл с Keep2Share api

В документации есть реализация Php, а именно

$data = $this->getUploadFormData($parent_id, $preferred_node);
$curl = curl_init();
        $postFields = $data['form_data'];

        $postFields[$data['file_field']] = new CURLFile($file);

        curl_setopt_array($curl, [
            CURLOPT_FOLLOWLOCATION => false,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_URL => $data['form_action'],
            CURLOPT_POST => true,
            CURLOPT_POSTFIELDS => $postFields,
        ]);

        $response = curl_exec($curl);
        if ($this->verbose) {
            echo '<<', $response, PHP_EOL;
        }
        return json_decode($response, true);

getUploadFormData метод возвращает JSON со следующими данными

status: [success]
status_code: [200,400]
form_action: string
file_field: string
form_data: [
    params: string
    signature: string
]

Но мне нужно перевести его на C #, я пытаюсь следующее

//dat is a object with getUploadForm data
var dat = await this.GetUploadFormData();

        HttpContent stringContent = new StringContent(dat.form_data.signature);
        HttpContent bytesContent = new ByteArrayContent(System.IO.File.ReadAllBytes(filename));

        using (var client = new HttpClient())

        using (var formData = new MultipartFormDataContent())
        {
            formData.Add(stringContent, "signature", "signature");
            formData.Add(bytesContent, "file", "file");
            var response = await client.PostAsync(dat.form_action, formData);

            using (var reader = new StreamReader(await response.Content.ReadAsStreamAsync()))
            {
                Console.WriteLine(await reader.ReadToEndAsync());
            }

            return await response.Content.ReadAsStreamAsync();
        }

Но я получаю

{"name": "Bad Request", "message": "Неправильная подпись. IP . 1 ** 58. * 54,213" , "код": 0, "Статус": 400}

Я почти уверен, что моя проблема в том, что я не передаю параметр подписи, как должно быть

это тот случай?

что я делаю не так?

Спасибо!

EDIT

Пример объекта getUploadFormData должен быть

   "status":"success",
   "code":200,
   "form_action":"http://file-api-27.keep2share.cc:8000/upload",
   "file_field":"file",
   "form_data":{  
      "ajax":true,
      "_params":null,
      "signature":"2eda59a25137a78ef05513c60182cebe9972d9d1b80d9e643e0a8104dcdf42f59cfbc76680c7caf2d93e090c74ebdcf19da664c53e9da14992d604469a634887"
    }
...