Включить несколько Методов HTTP на единственной операции?

Ваша проблема в том, что вам нужно явно close() файл, в который вы пишете, прежде чем вы сможете снова открыть его для чтения из него.

Но весь этот промежуточный файл не имеет смысла (, как я предлагал ранее ). Просто обработайте все данные в памяти, прежде чем записать их в выходной файл.

use strict;
use warnings;
use feature 'say';

use LWP::Simple;

my $dateField = 'date=2018-12-31';
my $currency  = "USD";
my $filename = 'doc3.txt';
my $address = "https://www.oanda.com/rates/api/v1/rates/$currency.csv?"
            . "api_key=gpolonsky&decimal_places=4&$dateField&fields=averages&"
            . "quote=USD"e=AUD"e=BRL"e=CAD"e=GBP&"
            . "quote=CHF"e=CNY"e=DKK"e=HKD"e=INR&"
            . "quote=IDR"e=ILS"e=JPY"e=MXN"e=NOK&"
            . "quote=PHP"e=PLN"e=SGD"e=sKK"e=ZAR&"
            . "quote=KRW"e=SEK"e=TWD"e=THB"e=EUR&"
            . "quote=MYR"e=NZD"e=SAR"e=TRY"e=RUB&"
            . "quote=CZK"e=AED"e=CLP"e=EGP"e=MAD&"
            . "quote=NGN"e=OMR"e=QAR";

my $content = get($address);

# I've removed $! from the die() error below. $! is the last
# *operating system* error. And making an HTTP request is not
# an operating system operation - so the contents will have no
# connection to the results of our GET request.
defined $content or die "Cannot read '$address'";
$content =~  s/^[^\n]*\n//s;
$content =~  s/^/20181231,/gm; # The m option makes ^ match at the start of each line
$content =~  s/,2018-12-3[0-9]T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]\+0000*//g;
$content =~  s/([A-Z][A-Z][A-Z]),[0-9]*\.[0-9][0-9][0-9][0-9]/$1/g;

my @curOrd = qw( USD AUD BRL GBP CAD CNY DKK HKD INR IDR ILS JPY MXN
                 NOK PHP PLN SGD SKK ZAR KRW SEK CHF TWD THB EUR MYR
                 NZD SAR TRY RUB CZK AED CLP EGP MAD NGN OMR QAR );

my $i = 1;
my %curr_lookup = map { 

Ваша проблема в том, что вам нужно явно close() файл, в который вы пишете, прежде чем вы сможете снова открыть его для чтения из него.

Но весь этот промежуточный файл не имеет смысла (, как я предлагал ранее ). Просто обработайте все данные в памяти, прежде чем записать их в выходной файл.

[110] => $i++ } @curOrd; my @data = map { [ split /,/ ] } split /\n/, $content; my $outfile = 'file2.txt'; @data = sort { $curr_lookup{$a->[2]} <=> $curr_lookup{$b->[2]} } @data; open my $out, '>', $outfile or die "Can't open $outfile for writing: $!"; say $out join ',', @

Ваша проблема в том, что вам нужно явно close() файл, в который вы пишете, прежде чем вы сможете снова открыть его для чтения из него.

Но весь этот промежуточный файл не имеет смысла (, как я предлагал ранее ). Просто обработайте все данные в памяти, прежде чем записать их в выходной файл.

[110] for @data;

9
задан Eric Schoonover 16 February 2009 в 23:49
поделиться

5 ответов

Это сообщение на Форумах MSDN Carlos Figueira имеет решение. Я пойду с этим на данный момент, но если у кого-либо еще есть какие-либо более чистые сообщенные мне решения.

[OperationContract,
WebInvoke(Method="POST",
    BodyStyle = WebMessageBodyStyle.Bare,
    RequestFormat = WebMessageFormat.Xml,
    ResponseFormat = WebMessageFormat.Xml,
    UriTemplate = "query")]
XElement Query_Post(string qry);

[OperationContract,
WebInvoke(Method="GET",
    BodyStyle = WebMessageBodyStyle.Bare,
    RequestFormat = WebMessageFormat.Xml,
    ResponseFormat = WebMessageFormat.Xml,
    UriTemplate = "query?query={qry}")]
XElement Query_Get(string qry);
5
ответ дан 4 December 2019 в 10:05
поделиться

Можно хотеть смотреть на WebGetAttribute, я не попробовал его сам, но Вы можете применять его к тому же методу наряду с WebInvokeAttribute.

Информация о MSDN и Jeff Barnes.

1
ответ дан 4 December 2019 в 10:05
поделиться

ДОБЕРИТЕСЬ и POST подразумевают различные действия все же.

Разве это не будет сбивать с толку клиенты, и неправильно с точки зрения REST?

-1
ответ дан 4 December 2019 в 10:05
поделиться

Для проблемы, описанной выше, изменяя WebInvoke на WebGet в случае API Query_Get, решит проблему.

1
ответ дан 4 December 2019 в 10:05
поделиться

Не использование WebInvoke добьется цели.

Это не может быть ответом, который Вы ищете, все же.

-3
ответ дан 4 December 2019 в 10:05
поделиться
Другие вопросы по тегам:

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