Как сделать HTTP POST веб-запрос

попробуйте использовать функцию instr?

select my_column from my_table where  instr(?, ','||search_column||',') > 0

, тогда

ps.setString(1, ",A,B,C,"); 

По общему признанию, это немного грязный взлома, но это уменьшает возможности для SQL-инъекции. Все равно работает в oracle.

974
задан Jeremy Thompson 17 April 2019 в 03:45
поделиться

1 ответ

Почему это не полностью тривиально? выполнение запроса не и особенно не контакт с результатами и кажется, что существуют некоторые ошибки.NET, включенные также - см. https://social.msdn.microsoft. com/Forums/en-US/d8d87789-0ac9-4294-84a0-91c9fa27e353/bug-in-httpclientgetasync-should-throw-webexception-not-taskcanceledexception? forum=netfxnetcom

я закончил с этим кодом:

static async Task<(bool Success, WebExceptionStatus WebExceptionStatus, HttpStatusCode? HttpStatusCode, string ResponseAsString)> HttpRequestAsync(HttpClient httpClient, string url, string postBuffer = null, CancellationTokenSource cts = null) {
    try {
        HttpResponseMessage resp = null;

        if (postBuffer is null) {
            resp = cts is null ? await HttpClient.GetAsync(url) : await HttpClient.GetAsync(url, cts.Token);

        } else {
            using (var httpContent = new StringContent(postBuffer)) {
                resp = cts is null ? await HttpClient.PostAsync(url, httpContent) : await HttpClient.PostAsync(url, httpContent, cts.Token);
            }
        }

        var respString = await resp.Content.ReadAsStringAsync();
        return (resp.IsSuccessStatusCode, WebExceptionStatus.Success, resp.StatusCode, respString);

    } catch (WebException ex) {
        WebExceptionStatus status = ex.Status;
        if (status == WebExceptionStatus.ProtocolError) {
            // Get HttpWebResponse so that you can check the HTTP status code.
            using (HttpWebResponse httpResponse = (HttpWebResponse)ex.Response) {
                return (false, status, httpResponse.StatusCode, httpResponse.StatusDescription);
            }
        } else {
            return (false, status, null, ex.ToString()); 
        }

    } catch (TaskCanceledException ex) {
        if (ex.CancellationToken == cts.Token) {
            // a real cancellation, triggered by the caller
            return (false, WebExceptionStatus.RequestCanceled, null, ex.ToString());
        } else {
            // a web request timeout (possibly other things!?)
            return (false, WebExceptionStatus.Timeout, null, ex.ToString());
        }

    } catch (Exception ex) {
        return (false, WebExceptionStatus.UnknownError, HttpStatusCode.NotImplemented, ex.ToString());
    }
}

Это сделает, ПОЛУЧЕНИЕ или POST зависят, если postBuffer является пустым или не

, если Успех верен, что ответ тогда будет в ResponseAsString

, если Успех будет ложью, можно проверить WebExceptionStatus, HttpStatusCode и ResponseAsString, чтобы попытаться видеть то, что пошло не так, как надо.

я приветствую комментарии к этому как я все еще не уверенный, что это покрывает все случаи.

1
ответ дан 19 December 2019 в 20:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: