(Http)WebRequest의 Post 전송문제 질문드립니다. (아래 글 다시 정리)

아래글 지우려고 하는데
이 주제를 삭제할 권한이 없습니다. 실제로 삭제하려면 추론과 함께 중재자주의 플래그를 제출하십시오.
이런 문구가 나오고 삭제가 안되더군요 ㅠㅠ

그리고 C# 구문 넣는 방법 알고 싶습니다.

일반적인 HttpWebRequest 클래스를 이용한 POST 전송방법입니다. Docs 나 그굴링 하면 그냥 다 똑같더군요

강제로 post data 값 : meta=meta&responseType=json 으로 하여 Encoding.UTF8.GetByte(~) 하여
Stream 으로 보냈습니다.

그런데 Web Api (웹페이지) 단에서는 해당 Post 가 넘어오지 않습니다.
Post (Request) 한 값을 Response 로 받아보면 값이 해당 값이 없는것입니다.

혹시나 해서 웹폼페이지에서 해당 meta, responseType 을 Form 전송 했는데 이건 잘들어옵니다.

왜 HttpWebReqeust 로 Request 했을 때 데이타가 누락되는 것일까요? 아니면 웹에서 뭔가를
해줘야 하는 것이 있는건가요?

정보가 파편화 되어 답을 드리기가 힘듭니다. 본 글을 기존 글의 댓글로 옮겨주세요.

public string WebRequestJson(string url, string postData)
{
Logger.Debug(String.Format(“request:\r\n{0}\r\n----------------------------”, postData));

        string ret          = string.Empty;
        byte[] byteArray    = Encoding.UTF8.GetBytes(postData);
        var webRequest      = System.Net.WebRequest.Create(url) as HttpWebRequest;

        if (webRequest != null)
        {
            webRequest.ContentType      = "application/x-www-form-urlencoded;";
            webRequest.ContentLength    = byteArray.Length;
            webRequest.Method           = "POST";
            Stream dataStream           = null;

            try
            {
                dataStream  = webRequest.GetRequestStream();
                dataStream.Write(byteArray, 0, byteArray.Length);
                dataStream.Close();
            }

            catch (WebException we)
            {
            }
            catch (Exception e)
           {
            }
            finally
            {
                if (dataStream != null)
                {
                    dataStream.Close();
               }
            }
        }

        HttpWebResponse resp    = (HttpWebResponse)webRequest.GetResponse();
        Stream resStream        = resp.GetResponseStream();
        StreamReader reader     = new StreamReader(resStream);

        ret                     = reader.ReadToEnd();
        Logger.Debug(String.Format("response:\r\n{0}\r\n----------------------------", ret));

        return ret;
    }

스트림으로 보낼 때 웹단에서
$_POST, Request.GetParameter, Request.Form 이런식으로 받을 수 없나요?

클라이언트에서 보내는 데이터가 서버에 안들어올 수 있는 이유는 여러 가지가 있습니다. 단순히 서버 애플리케이션이 특정 언어를 사용하고 있기 때문만은 아닐 수 있습니다.

중간에 WAF가 동작하고 있거나, 프록시 연결이 껴있지는 않은지도 확인해보셔야 할 것 같습니다.

그리고 말씀하신 서버 측 코드가 무엇인지 정확한 설명이 필요해보입니다.

예를 들어 클래식 ASP의 경우 Galaxy Upload 같은 서드파티 컴포넌트를 이용하여 IIS가 보내온 멀티파트 인코딩을 분석하여 서버 측 디스크에 저장하는 보조 기능을 제공하는 처리기가 있어야 파일을 받을 수 있는데, 이와 같이 환경에 대한 설명이 누락되면 문제를 영영 찾을 수 없을 수도 있어서요.

그리고 기존 질문 글을 삭제하고 싶은 이유가 있으실까요? 커뮤니티 행동강령에 위배되는 부분이 있는 것 같진 않습니다.

전에 글 다시 쓸때 삭제하라고 해서요 ;;;

@니꼴라오 님~ 제가 매번 본문에 오타랑 소스코드 고쳐드리고 있는 것 아시죠! :sweat_smile:

질문하실 때 좀 더(완전 많이) 신경 쓰셔서 오타나 소스코드 부분도 보기 좋게 작성해서 글 올려주시면 좋을 것 같습니다.

지금 직면한 문제를 해결하는 것도 중요하지만 정성들여 컨텐츠를 작성해서 품질을 높여주시면 나중에 같은 문제로 찾아온 다른 분들도 쉽게 해결할 수 있습니다!

좀 더 다른분들의 피드백도 적극 수용해주시면서 많이 많이 성장하는 커뮤니티 활동 해주셨으면 좋겠습니다. :smile:

좋아요 5
  • 이해한 문의내용
    C# 클라이언트에서 php server로 post할 경우 php에서 넘어온 post값이 제대로 넘어 오지 않는다?
    해당사항을 기준으로 테스트를 해보았습니다.
  • php server - laragon php 5.4.9

[c# 클라이언트]

using System.Net;

using System.IO;

using System.Collections.Specialized;

using System.Text.Json;

using System.Net.Http;

public string WebRequestJson(string url, byte[] byteArray)

{

    Console.WriteLine(String.Format("request:\r\n{0}\r\n----------------------------", Encoding.Default.GetString(byteArray)));

    string ret          = string.Empty;

    //byte[] byteArray    = Encoding.UTF8.GetBytes(postData);

    var webRequest      = System.Net.WebRequest.Create(url) as HttpWebRequest;

    if (webRequest != null)

    {

        webRequest.ContentType      = "application/x-www-form-urlencoded;";

        webRequest.ContentLength    = byteArray.Length;

        webRequest.Method           = "POST";

        Stream dataStream           = null;

        try

        {

            dataStream  = webRequest.GetRequestStream();

            dataStream.Write(byteArray, 0, byteArray.Length);

            dataStream.Close();

        }

        catch (WebException we)

        {

        }

        catch (Exception e)

        {

        }

        finally

        {

            if (dataStream != null)

            {

                dataStream.Close();

            }

        }

    }

    HttpWebResponse resp    = (HttpWebResponse)webRequest.GetResponse();

    Stream resStream        = resp.GetResponseStream();

    StreamReader reader     = new StreamReader(resStream);

    ret                     = reader.ReadToEnd();

    Console.WriteLine(String.Format("response:\r\n{0}\r\n----------------------------", ret));

    return ret;

}

var parameters = new Dictionary<string, string>();

parameters.Add("aaa", "1234");

parameters.Add("bbb", "5678");

var encodedContent = new FormUrlEncodedContent(parameters);

var byteContent = await encodedContent.ReadAsByteArrayAsync();

WebRequestJson("http://localhost/ReceivePostData.php", byteContent);

[php server(http://localhost/ReceivePostData.php)]

<?php echo $_POST['aaa']; ?>

<?php echo $_POST['bbb']; ?>

<?php

print_r($_GET);

print_r($_POST);

?>
좋아요 3