Я получаю эту ошибку, когда пытаюсь подключиться к веб-сокету
Ошибка подключения WebSocket к «wss://ropsten.infura.io/ws»: ошибка во время рукопожатия WebSocket: отправлен непустой заголовок «Sec-WebSocket-Protocol», но ответ не получен
Фрагмент кода
import web3 from 'web3';
var web3lib = new web3(
new web3.providers.WebsocketProvider('wss://ropsten.infura.io/ws'),
);
console.log(
'provider in web3 eth: ' + JSON.stringify(web3lib.currentProvider),
);
console.log('New block in web3 eth: ' + web3lib.blockNumber);
var subscription = web3lib.eth.subscribe('newBlockHeaders', function(
error,
result,
) {
if (!error)
console.log("output of web3 stream"+JSON.stringify(result));
else
console.log('Error of web3 stream ' + JSON.stringify(result));
});
Что я здесь делаю неправильно?
исправлено на web3@1.0.0-beta.36
https://github.com/ethereum/web3.js/issues/1559#issuecomment-412348642
Это работает
#!/usr/bin/env node
const Web3 = require('web3');
const web3 = new Web3(new Web3.providers.WebsocketProvider('wss://mainnet.infura.io/ws'));
const subscription = web3.eth.subscribe('newBlockHeaders', (error, blockHeader) => {
if (error) return console.error(error);
console.log('Successfully subscribed!', blockHeader);
}).on('data', (blockHeader) => {
console.log('data: ', blockHeader);
});
// unsubscribes the subscription
subscription.unsubscribe((error, success) => {
if (error) return console.error(error);
console.log('Successfully unsubscribed!');
});
Взял этот пример, предоставленный https://github.com/egalano.
https://github.com/INFURA/infura/issues/29#issuecomment-365128914
Кажется, что значение заголовка запроса WebSocket недопустимо.
Более конкретно, значение Sec-WebSocket-Protocol
равно undefined
.
Согласно приведенной ниже проблеме github, проблема была введена изweb3@1.0.0-beta.34
https://github.com/ethereum/web3.js/issues/1559
Я подтвердил, web3@1.0.0-beta.35
что еще не устранил проблему в моей среде. Поэтому web3@1.0.0-beta.33
необходимо перейти на более раннюю версию, если вы используете WebSocket в данный момент.
используя свой infrua ID для замены MYID :
client, err := ethclient.Dial("wss://mainnet.infura.io/ws/v3/MYID")
if err != nil {
log.Fatal(err)
}
headers := make(chan *types.Header)
sub, err := client.SubscribeNewHead(context.Background(), headers)
if err != nil {
log.Fatal(err)
}
for {
select {
case err := <-sub.Err():
log.Fatal(err)
case header := <-headers:
fmt.Println(header.Hash().Hex()) // 0xbc10defa8dda384c96a17640d84de5578804945d347072e091b4e5f390ddea7f
block, err := client.BlockByHash(context.Background(), header.Hash())
if err != nil {
log.Fatal(err)
}
log.Printf("TX:%s", block.Hash().Hex()) // 0xbc10defa8dda384c96a17640d84de5578804945d347072e091b4e5f390ddea7f
log.Printf("Height:%d", block.Number().Uint64()) // 3477413
log.Printf("Time:%d", block.Time()) // 1529525947
log.Println(block.Nonce()) // 130524141876765836
log.Printf("#:%d", len(block.Transactions())) // 7
}
}
Сундар
Даниэль Лука КлинЕдинорог
Сундар
Даниэль Лука КлинЕдинорог
web3@1.0.0-beta.34
Гас
Мэтт Суизи
...beta.36